SSMS
 sql >> Datenbank >  >> Database Tools >> SSMS

Was ist der SQLCMD-Modus in SQL Server Management Studio?

Ich habe etwas mehr recherchiert, also hier ist mein Verständnis davon, um das bisher Geschriebene zu erweitern:

Was ist SQLCMD

SQLCMD.exe ist ein Konsolendienstprogramm, das in der Installation von SQL Server 2005 und höher enthalten ist. Sie finden es normalerweise in einem Pfad wie c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE .

Es ist eine einfache Skriptumgebung, die die Automatisierung von Aufgaben im Zusammenhang mit SQL Server ermöglicht. Beispielsweise können Sie ein Skript schreiben und ausführen, das sich bei einer bestimmten Instanz von SQL Server anmeldet, Skripts von einem bestimmten Verzeichnis auf dieser Verbindung ausführen und die Ausgabe in einer bestimmten Datei speichern.

Invoke-Sqlcmd Cmdlet wurde mit SQL Server 2008 eingeführt, um dieses Tool durch einen standardisierten, Powershell-basierten Ansatz zu ersetzen, der den größten Teil der ursprünglichen Syntax und Funktionalität beibehält.

Was ist der SQLCMD-Modus in SSMS

In SSMS SQLCMD-Modus ist ein Skriptausführungsmodus, der die sqlcmd.exe-Umgebung simuliert und daher einige Befehle akzeptiert, die nicht Teil der T-SQL-Sprache sind. Im Gegensatz zu sqlcmd.exe , kontaktiert es die Datenbank über SqlClient (genauso wie SSMS), nicht ODBC Datenprovider, daher kann es in einigen Aspekten ein anderes Verhalten als sqlcmd.exe haben .

Das Ausführen von Skripten im SQLCMD-Modus ermöglicht die Verwendung von Befehlen, die für sqlcmd.exe typisch sind Umgebung. Es gibt jedoch keine IntelliSense- oder Debugging-Unterstützung für den SQLCMD-Modus, sodass die Verwaltung von Skripts, die sauberes T-SQL mit SQLCMD-spezifischem Code mischen, mühsam sein kann. Daher sollte es nur verwendet werden, wenn es notwendig ist.

Anwendungsbeispiel

Nehmen wir an, dass ein Unternehmen eine Namenskonvention für Datenbanken hat, die Umgebung im Namen enthalten, zB:MyDb_Prod , MyDb_Test , MyDb_Dev . Diese Konvention kann verwendet werden, um das Risiko von Fehlern zu minimieren .

Wenn ein Entwickler ein T-SQL-Skript schreibt, muss es in verschiedenen Umgebungen im Bereitstellungs-/Testprozess ausgeführt werden, was viele Versionen des Codes erfordern würde:

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

Stattdessen können wir davon ausgehen, dass der Datenbankname im Bereitstellungsprozess als SQLCMD-Variable bereitgestellt wird und genau dieselbe Datei in allen Umgebungen bereitgestellt wird:

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

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

(In diesem einfachen Beispiel könnte der Datenbankname ganz weggelassen werden, aber wenn Sie datenbankübergreifende Verknüpfungen haben, ist die Verwendung des Datenbanknamens erforderlich)