2010-08-09 13 views
12

Nous utilisons Visual Studio Database Professional et utilise beaucoup de variables SQLCMD pour différencier les environnements lors du déploiement.Est-il possible de forcer automatiquement le mode SQLCMD dans le script?

Je sais que plusieurs directives sont disponibles pour la mise en contexte (comme: connexion pour le nom du serveur). Y a-t-il un moyen dans le script lui-même de forcer le mode SQLCMD pour l'exécution? Une partie de notre processus de déploiement consiste à faire examiner et exécuter les scripts par les administrateurs de bases de données et ce serait un bon filet de sécurité (je n'ai donc pas à leur rappeler de définir leur mode d'exécution sur SQLCMD).

+0

+1 Vous cherchez une solution similaire. Jamais savoir comment le faire? –

+0

Non, toujours en attente. J'hésite à commencer une prime. –

Répondre

4

Pas une solution, mais en guise de solution, vous pouvez intégrer votre script dans un avertissement. This post m'a inspiré à ce code:

SET NOEXEC OFF; -- previous execution may have toggled it 
:setvar IsSqlCmdEnabled "True" 
GO 
IF ('$(IsSqlCmdEnabled)' = '$' + '(IsSqlCmdEnabled)') 
BEGIN 
    PRINT('Use SqlCmd-mode!!'); 
    SET NOEXEC ON; 
    -- RAISERROR ('This script must be run in SQLCMD mode.', 20, 1) WITH LOG 
END 
ELSE 
BEGIN 
    PRINT('Using SqlCmd-mode') 
    -- insert the code you really want to execute: 
    -- ... 
END 
SET NOEXEC OFF; -- do not disable next execution in this session 
+0

Je sais que c'est en retard, mais pour quelqu'un d'autre qui trouve cela dans le futur: les scripts de publication VS2010 font cela (ils définissent un var "__IsSqlCmdEnabled" spécial puis vérifient immédiatement sa valeur) mais aussi "SET NOEXEC ON" mesure de sécurité pour empêcher toute autre chose dans le script de fonctionner. –

+0

@Micheal, merci pour le conseil, j'ai ajouté le 'NOEXEC'. (Non testée, pas de SqlServer disponible à ce moment, mais cela semble assez simple.) –

+0

Ne fonctionne que lors de la première exécution – Paul

0

Cela ne semble pas possible. J'ai même vérifié le mode projet SSMS.

Toutefois, si vous créez un projet de base de données dans BIDS, les scripts post-déploiement & de pré-déploiement s'exécutent en mode SQLCMD par défaut.

Je sais que ce n'est pas la réponse que vous voulez, mais c'est le meilleur que je peux vous donner sans avoir recours à la création d'un plugin SSMS personnalisé qui le ferait pour vous en fonction du texte dans le fichier script.