Gestion des variables dans Visual Studio Team Edition for Database Professionals SR1

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…

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s