68 votes

Dans SQL Server Management Studio, qu'est-ce que le mode SQLCMD ?

Dans SQL Server Management Studio, j'aimerais savoir ce qu'est le mode SQLCMD.

3 votes

Voir L'atelier SQLCMD pour des exemples où cela s'avère utile.

0 votes

91voto

buli Points 645

J'ai fait quelques recherches supplémentaires, et voici ce que j'en pense pour compléter ce qui a été écrit jusqu'à présent :

Qu'est-ce que SQLCMD ?

SQLCMD.exe est un utilitaire de console inclus dans l'installation de SQL Server 2005 et des versions ultérieures. Vous le trouverez généralement dans un chemin d'accès comme c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE .

Il s'agit d'un environnement de script simple qui permet d'automatiser les tâches liées au serveur SQL. Par exemple, vous pouvez écrire et exécuter un script qui se connectera à une instance spécifique du serveur SQL, exécutera des script à partir d'un répertoire donné sur cette connexion et stockera la sortie dans un fichier spécifié.

Invoke-Sqlcmd a été introduite avec SQL Server 2008 afin de remplacer cet outil par une approche standardisée, basée sur Powershell, tout en préservant la plupart de la syntaxe et des fonctionnalités d'origine.

Qu'est-ce que le mode SQLCMD dans SSMS ?

Dans SSMS, Mode SQLCMD est un mode d'exécution script qui simule l'environnement sqlcmd.exe et accepte donc certaines commandes qui ne font pas partie du langage T-SQL. Contrairement à sqlcmd.exe Il contacte la base de données à l'aide de SqlClient (de la même manière que pour le SSMS), et non pas ODBC Il peut donc, à certains égards, avoir un comportement différent de celui d'un fournisseur de données. sqlcmd.exe .

L'exécution de scripts en mode SQLCMD permet d'utiliser des commandes typiques de sqlcmd.exe l'environnement. Cependant, il n'y a pas d'IntelliSense ou de support de débogage pour le mode SQLCMD, donc maintenir des scripts qui mélangent du T-SQL propre avec du code spécifique à SQLCMD peut s'avérer pénible. Par conséquent, ce mode ne devrait être utilisé que lorsque c'est nécessaire.

Exemple de cas d'utilisation

Supposons qu'une entreprise ait une convention de dénomination pour les bases de données qui incluent l'environnement dans le nom, par exemple : MyDb_ Prod , MyDb_ Test , MyDb_ Dév . Cette convention peut être utilisée pour minimiser les risques d'erreurs .

Lorsqu'un développeur écrit un script T-SQL, celui-ci devra être exécuté dans différents environnements au cours du processus de déploiement/test, ce qui nécessitera de nombreuses versions du code :

 SELECT *
 FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod

Au lieu de cela, nous pouvons supposer que le nom de la base de données sera fourni en tant que variable SQLCMD dans le processus de déploiement et que le même fichier sera déployé dans tous les environnements :

 -- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS

 SELECT *
 FROM [$(databaseName)].[dbo].[MyTable1]

(dans cet exemple simple, le nom de la base de données pourrait être complètement omis, mais si vous avez des jointures entre bases de données, il est nécessaire d'utiliser le nom de la base de données).

20voto

Oded Points 271275

Exactement ce que l'on pourrait croire.

Il s'agit d'un mode qui vous permet de créer des scripts.

De MSDN - Modification des scripts avec l'éditeur de requêtes :

Pour utiliser l'éditeur de requêtes du moteur de base de données afin d'écrire ou de modifier des scripts SQLCMD scripts, vous devez activer le mode script SQLCMD.

Dans SQL Server Management Studio, ce paramètre est défini dans le menu Query (Query -> SQLCMD Mode).

7 votes

Ce n'était évidemment pas moi, mais de nombreuses ressources ne sont pas très explicites sur la différence entre l'utilisation de SQLCMD et l'exécution de quelques instructions T-SQL dans Management Studio. Un script de conversion que Visual Studio a généré pour moi la semaine dernière vérifie si SQLCMD est activé et refuse de s'exécuter si ce n'est pas le cas, et il semble qu'il y ait une option pour l'activer/désactiver dans le menu Query de Management Studio. Il y a donc une différence, mais de nombreuses ressources se contentent de dire que SQLCMD est un outil formidable qui vous permet d'exécuter des instructions T-SQL et des lots, et s'en tiennent là.

29 votes

Cette réponse explique SQLCMD en utilisant SQLCMD et n'est rien d'autre qu'un lien vers MSDN. Elle n'est donc d'aucune utilité.

2 votes

Et même ce lien vers MSDN n'explique pas ce qui suit à tous pourquoi quelqu'un pourrait choisir d'utiliser un SQLCMD script au lieu d'un simple TSQL. Il explique simplement les mécanismes et la syntaxe de l'édition.

19voto

Jay M Points 188

"Vous utilisez SQLCMD scripts lorsque vous devez traiter des commandes système Windows et des instructions Transact-SQL dans le même scripts."

"Par défaut, le mode SQLCMD n'est pas activé dans l'éditeur de requêtes. Vous pouvez activer le mode script en cliquant sur l'icône Mode SQLCMD dans la barre d'outils ou en sélectionnant Mode SQLCMD dans le menu Requête".

Référence : MSDN

2 votes

Plus significative et plus détaillée que la solution.

2voto

Irina Danovich Points 41

Message L'IntelliSense Transact-SQL n'est pas actif pour cet éditeur car l'éditeur est en mode SQLCMD.

Je publiais un projet SQL Server depuis Visual Studio vers une base de données pour synchroniser les modifications et j'ai obtenu une erreur ci-dessus. La publication échouait. J'ai fermé tous les fichiers ouverts dans VS et le problème a été résolu.

J'espère que cet exemple concret explique pourquoi les gens utilisent le mode SQLCMD.

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