2010-03-12 9 views
11

Mi chiedo se c'è un modo per forzare MSSQL Management Studio per produrre uno script come questo:Forzare Management Studio per utilizzare ALTER TABLE invece di DROP/CREATE

ALTER TABLE Mytable 
ADD MyCol bit NOT NULL 
CONSTRAINT MyColDefault 
DEFAULT 0 WITH VALUES 


ALTER TABLE [dbo].Mytable 
ALTER COLUMN MyCol2 int NULL 

GO 

quando ho modificare una proprietà molto semplice di una colonna su un tavolo. Se faccio questo nel designer e chiedo lo script prodotto, lo script non svolge compiti così semplici, ma invece copia tutti i dati in una tabella tmp, elimina la tabella originale, rinomina la tabella tmp con il nome della tabella originale . E, naturalmente, cade e ricrea ogni vincolo e ogni relazione.

C'è qualche opzione che posso cambiare per modificare questo comportamento? Oppure, questo può essere possibile, c'è qualche pericolo che non vedo nell'usare la semplice ALTER TABLE sopra?

grazie.

+0

Hai mai trovato un modo per fare questo Marco? – AnotherDeveloper

risposta

5

Non è possibile modificare il comportamento, è solo che lo script predefinito che crea non è sempre il più efficiente. Crea script in un formato che è sa che funzionerà, anche se spesso i risultati saranno lenti e pesanti in termini di risorse. Ti consiglio di abituarti a creare lo script per tutte le modifiche da solo, in quanto puoi ottimizzarlo meglio. Non c'è niente di sbagliato in ciò che hai creato (a patto di non avere vincoli/dipendenze esistenti su MyCol2 che potrebbero essere invalidati diventando un valore nullable)

7

Sì, è possibile!

In SQL Server Management Studio, passare alla modalità di progettazione tabella per la tabella in questione e apportare le modifiche. Tuttavia: fare non fare clic sul pulsante "Salva", ma invece fare clic con il pulsante destro del mouse nella vista di progettazione della tabella, dovrebbe esserci una voce "Genera script di modifica" alla fine del menu di scelta rapida.

alt text http://i40.tinypic.com/33e7ite.png

Clicca su quella voce di menu e avrai presentato una finestra di dialogo pop-up che contiene lo script T-SQL necessario per fare quelle modifiche apportate alla tabella nella finestra di progettazione. Copia o salva il codice T-SQL e cancella il designer e voilà: hai il tuo script di modifica!

UPDATE: Marco, mi dispiace, non credo che ci sia alcuna opzione per modificare il comportamento predefinito, almeno non ora. Potresti voler presentare una richiesta di miglioramento con Microsoft su Microsoft Connect per proporlo - buona idea, penserei!

+1

ciao Marc, mi dispiace, forse non mi sono chiarito. Lo so, e questo è il modo in cui ho saputo che SQLMS fa le cose in questo modo. Mi sarebbe piaciuto sapere se esiste un modo per modificare il comportamento predefinito. Quello che suggerisci è utile per usare lo script più tardi, ed è proprio quello che voglio fare. Peccato che la sceneggiatura qui generata sia macchinosa e non efficiente in termini di risorse nella solita situazione, a mio modesto parere. ciao! – marco

-1

facile! vai su Tool ->Option, quindi sul nodo Designer e seleziona Table and Database designer in modo da deselezionare la casella di controllo Prevent saving changes that require ....

Ora puoi progettare qualsiasi chage sul tuo tavolo!

+3

Questo ti darà un errore invece di salvare le tue modifiche - non renderà l'utente del designer ALTER TABLE. –