Sto generando uno script per la migrazione automatica delle modifiche da più database di sviluppo a staging / produzione. Fondamentalmente, ci vogliono un sacco di script di modifica e li unisce in un singolo script, avvolgendo ogni script in IF whatever BEGIN ... ENDun'istruzione.
Tuttavia, alcuni degli script richiedono GOun'istruzione in modo che, ad esempio, il parser SQL sia a conoscenza di una nuova colonna dopo che è stata creata.
ALTER TABLE dbo.EMPLOYEE
ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN"
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
Tuttavia, una volta che lo avvolgo in un IFblocco:
IF whatever
BEGIN
ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
END
Non riesce perché invio un messaggio BEGINsenza corrispondenza END. Tuttavia, se rimuovo il, GOsi lamenta di nuovo di una colonna sconosciuta.
C'è un modo per creare e aggiornare la stessa colonna all'interno di un singolo IFblocco?
GOdebba essere su una riga da solo, quindi puoi cercare solo quel caso e non ogni istanza della parola GO. 2) Puoi sempre registrare quali istruzioni sono state completate con successo. Oppure puoi racchiudere il tutto in un tentativo / cattura e utilizzare i tuoi numeri di riga utilizzando alcune variabili, come @lineNo, di cui tieni traccia e segnalare gli errori. Dal momento che li stai generando automaticamente, apportare modifiche come questa dovrebbe essere un gioco da ragazzi. Sembra proprio che tu non voglia esplorare questo percorso quando penso che ci siano soluzioni da trovare per tutte le tue preoccupazioni.