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).
3 votes
Voir L'atelier SQLCMD pour des exemples où cela s'avère utile.
0 votes
Et dba.se : dba.stackexchange.com/search?q=sqlcmd