63 votes

Logique conditionnelle dans PostDeployment.sql script en utilisant SQLCMD

J'utilise un projet de base de données SQL 2008 (dans Visual Studio) pour gérer le schéma et les données de test initiales de mon projet. Le projet de base de données utilise un post-déploiement qui comprend un certain nombre d'autres scripts utilisant la syntaxe ":r" de SQLCMD.

J'aimerais pouvoir inclure de manière conditionnelle certains fichiers en fonction d'une variable SQLCMD. Cela me permettra d'exécuter le projet plusieurs fois dans le cadre de notre construction nocturne afin de configurer différentes versions de la base de données avec différentes configurations des données (pour un système multi-tenant).

J'ai essayé ce qui suit :

IF ('$(ConfigSetting)' = 'Configuration1')
  BEGIN
    print 'inserting specific configuration' 
:r .\Configuration1\Data.sql
  END
ELSE
  BEGIN
    print 'inserting generic data' 
:r .\GenericConfiguration\Data.sql
  END

Mais je reçois une erreur de compilation : SQL01260 : Une erreur d'analyse fatale s'est produite : script.PostDeployment.sql

Est-ce que quelqu'un a vu cette erreur ou a réussi à configurer son script post-déploiement pour être flexible de cette façon ? Ou est-ce que je m'y prends complètement de travers ?

Merci, Rob

P.S. J'ai également essayé de modifier cette procédure pour que le chemin d'accès au fichier soit une variable, similaire à ce poste . Mais cela me donne une erreur disant que le chemin est incorrect.

2voto

Martin Karouš Points 53

J'ai été inspiré par la solution de Rob Bird. Cependant, j'utilise simplement les événements de construction pour remplacer les scripts de post-déploiement en fonction de la configuration de construction sélectionnée.

  1. J'ai un déploiement de post "factice" vide script.
  2. J'ai mis en place un événement de pré-construction pour remplacer ce fichier "factice" en fonction de la configuration de construction sélectionnée (voir l'image ci-jointe).
  3. J'ai mis en place un événement post-build pour replacer le fichier "factice" après la fin du build (voir image jointe). La raison est que je ne veux pas générer de changements dans le contrôle des modifications après la construction.

Build Events setup example

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X