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 ... END
un'istruzione.
Tuttavia, alcuni degli script richiedono GO
un'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 IF
blocco:
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 BEGIN
senza corrispondenza END
. Tuttavia, se rimuovo il, GO
si lamenta di nuovo di una colonna sconosciuta.
C'è un modo per creare e aggiornare la stessa colonna all'interno di un singolo IF
blocco?
GO
debba 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.