Je génère un script pour migrer automatiquement les modifications de plusieurs bases de données de développement vers la préparation / production. Fondamentalement, cela prend un tas de scripts de changement et les fusionne en un seul script, enveloppant chaque script dans une IF whatever BEGIN ... ENDinstruction.
Cependant, certains scripts nécessitent une GOinstruction afin que, par exemple, l'analyseur SQL connaisse une nouvelle colonne après sa création.
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
Cependant, une fois que j'enroule cela dans un IFbloc:
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
Il échoue parce que j'envoie un BEGINsans correspondance END. Cependant, si je supprime le, GOil se plaint à nouveau d'une colonne inconnue.
Existe-t-il un moyen de créer et de mettre à jour la même colonne dans un seul IFbloc?
GOdoit être sur une ligne par lui-même, vous pouvez donc rechercher uniquement ce cas, et pas toutes les instances du mot GO. 2) Vous pouvez toujours enregistrer les instructions qui ont été exécutées avec succès. Ou vous pouvez envelopper le tout dans un try / catch et utiliser vos propres numéros de ligne en utilisant une variable, comme @lineNo, dont vous gardez une trace et signalez l'erreur. Puisque vous les générez automatiquement, apporter des modifications comme celles-ci devrait être un jeu d'enfant. Il semble juste que vous ne vouliez pas explorer cette voie alors que je pense qu'il y a des solutions à trouver pour toutes vos préoccupations.