J'ai ajouté une colonne supplémentaire à une table que je souhaite initialiser à l'aide d'une requête dans le script de post-déploiement. Malheureusement, je n'arrive pas à écrire une requête qui peut être exécutée à chaque fois, donc je cherche un moyen de vérifier le script de pré-déploiement si la colonne est disponible et de passer un argument ou une variable au script de post-déploiement exécutera ensuite la requête d'initialisation une fois.Script de pré-déploiement et de post-déploiement de projet de base de données SQL Server
Tentative 1: J'ai essayé la fixation d'un sqlcmd
var dans le script de pré-déploiement, mais la syntaxe suivante n'est pas autorisé:
IF COL_LENGTH('dbo.Table','NewColumn') IS NULL
:setvar PerformInitQuery 1
Tentative 2: J'ai aussi essayé d'utiliser une normale variable dans le script de pré-déploiement:
DECLARE @PerformInitQuery BIT = 0
IF COL_LENGTH('dbo.Table','NewColumn') IS NULL
SET @PerformInitQuery = 1
et l'accès dans le script de post-déploiement:
IF @PerformInitQuery = 1
BEGIN
:r ".\DeploymentScripts\PerformInitQuery.sql"
END
Cette dernière tentative semblait fonctionner lors de la publication du projet à partir de Visual Studio mais pas sur notre serveur de construction; qui utilise SqlPackage.exe
pour publier le fichier .dacpac
généré dans la base de données.
Erreur SQL72014: .Net SqlClient Data Provider:
Msg 137, Niveau 15, État 2, Ligne 12
doit déclarer la variable scalaire "@PerformInitQuery"
Une variable normale ne fonctionnera pas car elle n'existe que dans un seul lot. Le déploiement utilisera plusieurs lots. Vérifiez simplement le script de création et vous verrez plusieurs instructions 'GO'. Pourquoi ne pas ajouter la même vérification que celle que vous effectuez dans votre pré-déploiement à votre post-déploiement? – JodyT
Parce que la construction va créer la colonne avant que le script de post-déploiement s'exécute, je n'ai aucun moyen de déterminer si elle a été créée cette course ou une course avant – Zenuka