Business Geek

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 10 août 2007

Stopper un script de déploiement avec DBPros

Dans mon script de pré-déploiement, je souhaite arrêter le déploiement si une base de données n'existe pas.

Comme indiqué en entête de Script.PreDeployment.sql, je me décide à utiliser la syntaxe de SQLCMD (qui sera utilisé pour jouer mon script).

J'écris donc une commande de ce style :

IF NOT EXISTS (SELECT 1 FROM [sys].[databases] WHERE [name] = N'$(DatabaseName)')
   QUIT

Seulement, comme pour les variables, l'étape de parsing à la compilation d'un projet de base de données ne supporte pas le mot-clé QUIT (ni EXIT d'ailleurs). Donc impossible de sortir du script sur une condition.

Solution de contrournement : lever une erreur avec l'instruction RAISERROR et utiliser l'option -b avec SQLCMD pour stopper le script sur erreur

IF NOT EXISTS (SELECT 1 FROM [sys].[databases] WHERE [name] = N'$(DatabaseName)')
  RAISERROR(N'Database $(DatabaseName) does not exists, setup could not be execute.',0,1)

 

lundi 6 août 2007

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...

samedi 26 mai 2007

Visual Studio Team Edition for Database Professionnals (TeamDB)

Il y a quelques temps, j'ai enregistré une série de webcasts sur le petit dernier de la suite Visual Studio Team Suite, à savoir, une version dédiée à la gestion de base de données.
Ces webcasts devaient être mis en ligne sur le centre de compétences Team System de Microsoft mais pour je ne sais quelle raison, ils ne l'ont pas fait.

Ce sont mes premiers webcasts donc la qualité laisse à désirer, surtout au niveau du son donc faites péter les watts.

" Découvrez au travers de cette série de Webcast la dernière version de Visual Studio, membre de la famille Team System, à destination des professionnels de la base de données. Les principales fonctionnalités de l’outil sont passées en revue, de l’importation de schéma au déploiement des modifications. "

TeamDB - Part 1 - Présentation et prise en main
TeamDB - Part 1 - Présentation et prise en main
 TeamDB - Part 2 - Les tests
TeamDB - Part 2 - Les tests

TeamDB - Part 3 - La compilation et le déploiement
TeamDB - Part 3 - La compilation et le déploiement

 

Bon visionnage