J’étais super content que la SR1 de TeamDB (ou DBPros alias Visual Studio Team Edition for Database Professional) sorte enfin des cartons. En effet, j’en avais besoin pour utiliser les variables au niveau projet. J’ai été un peu déçu de voir qu’on ne pouvait les utiliser que dans un contexte restreint.
Laissez moi vous décrire le besoin que j’avais dans mes scripts de pré et post déploiement. Je voulais appliquer des scripts conditionnels en fonction du mode de compilation (release ou debug). Ce que je voudrais ressemblerait à peu près à cela :
IF $(DEBUG) = 1
Begin
--test data for development environment
INSERT INTO dbo.myTable VALUES('some data')
End
Dans les propriétés du projet ça donne cela :
Mais $(DEBUG) utilisé comme ci-dessus génère une erreur au parsing pendant la compilation. En effet, selon l’outil, on ne peut pas utiliser une variable de cette façon alors que c’est conforme avec la syntaxe de l’outil SQLCMD qui est utilisé par DBPros pour jouer le script sur le serveur. Le parsing de la compilation n’accepte que l’utilisation dans une chaîne de caractères ou comme nom d’entité SQL Server (une table ou un serveur lié); ex : Select * From [$(TableName)]
.
J’utilise alors la solution de contournement suivante qui j’avoue n’est pas très élégante mais qui fonctionne :
Declare @debug as int
Select @debug = cast('$(DEBUG)' as int)
If @debug = 1
Begin
--do my stuff
print 'DEBUG MODE!!!'
End
Si vous trouvez un méthode plus élégante, je suis preneur…