Estoy generando un script para migrar automáticamente los cambios de varias bases de datos de desarrollo a la etapa de preparación / producción. Básicamente, se necesitan varios scripts de cambio y los fusiona en un solo script, envolviendo cada script en una IF whatever BEGIN ... END
declaración.
Sin embargo, algunos de los scripts requieren una GO
declaración para que, por ejemplo, el analizador de SQL conozca una nueva columna después de que se cree.
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
Sin embargo, una vez que envuelvo eso en un IF
bloque:
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
Falla porque estoy enviando un BEGIN
mensaje sin coincidencia END
. Sin embargo, si elimino el GO
, vuelve a quejarse de una columna desconocida.
¿Hay alguna forma de crear y actualizar la misma columna dentro de un solo IF
bloque?
GO
debe estar en una línea por sí solo, por lo que puede buscar solo ese caso, y no todas las instancias de la palabra GO
. 2) Siempre puede registrar qué declaraciones se completaron correctamente. O puede envolver todo en un try / catch y usar sus propios números de línea usando alguna variable, como @lineNo, de la que realiza un seguimiento e informa sobre el error. Dado que los está generando automáticamente, realizar cambios como este debería ser muy sencillo. Parece que simplemente no quieres explorar esta ruta cuando creo que hay soluciones para todas tus preocupaciones.