Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Datenbank in Microsoft Fabric
Mit dem sqlcmd-Hilfsprogramm können Sie Transact-SQL Anweisungen, Systemprozeduren und Skriptdateien eingeben.
Note
Informationen dazu, welche Variante und Version von sqlcmd auf Ihrem System installiert ist, finden Sie unter Überprüfen der installierten Version des sqlcmd-Hilfsprogramms. Informationen zum Abrufen von sqlcmd finden Sie unter Herunterladen und Installieren des sqlcmd-Hilfsprogramms.
Skriptvariablen in sqlcmd
Variablen, die in Skripts verwendet werden, werden als Skriptvariablen bezeichnet. Durch Skriptvariablen wird ein Skript aktiviert, das in verschiedenen Szenarien verwendet wird. Wenn Sie beispielsweise ein einzelnes Skript auf mehreren Servern ausführen möchten, anstatt das Skript für jeden Server zu ändern, können Sie eine Skriptvariable für den Servernamen verwenden. Durch das Ändern des Servernamens für die Skriptvariable kann das gleiche Skript auf verschiedenen Servern ausgeführt werden.
Skriptvariablen können explizit mithilfe des setvar Befehls oder implizit mithilfe der sqlcmd -v Option definiert werden.
Dieser Artikel enthält auch Beispiele zum Definieren von Umgebungsvariablen in der Befehlszeile mithilfe SETvon .
Festlegen von Skriptvariablen mit dem Befehl „setvar“
Der setvar Befehl definiert Skriptingvariablen. Variablen, die mithilfe des setvar Befehls definiert werden, werden intern gespeichert. Skriptvariablen dürfen nicht mit Umgebungsvariablen verwechselt werden, die an der Eingabeaufforderung mithilfe von SET definiert werden. Wenn ein Skript auf eine Variable verweist, die keine Umgebungsvariable ist oder nicht mithilfe setvardefiniert ist, wird eine Fehlermeldung zurückgegeben und die Ausführung des Skripts beendet. Weitere Informationen finden Sie unter der Option -b in sqlcmd.
Rangfolge der Variablen (vom niedrigsten bis zum höchsten Rang)
Wenn mehrere Variablentypen denselben Namen aufweisen, wird die Variable mit der höchsten Rangfolge verwendet.
- Umgebungsvariablen auf Systemebene
- Umgebungsvariablen auf Benutzerebene
- Die vor dem Starten von
SET X=Ysqlcmd über die Eingabeaufforderung festgelegte Befehlsshell () sqlcmd -v X=Y:Setvar X Y
Note
Um die Umgebungsvariablen unter Windows 11 anzuzeigen, öffnen Sie "Einstellungen", navigieren Sie dann zu "System>About", und wählen Sie den Link " Erweiterte Systemeinstellungen" aus . Wählen Sie im Fenster "Systemeigenschaften" die Option "Umgebungsvariablen" aus. Geben Sie unter Linux printenv in die Befehlszeile ein, und geben Sie unter macOS env ein.
Implizites Festlegen von Skriptvariablen
Wenn Sie sqlcmd mit einer Option starten, die eine verknüpfte sqlcmd -Variable aufweist, wird die sqlcmd -Variable implizit auf den Wert festgelegt, der mithilfe der Option angegeben wurde. Im folgenden Beispiel beginnt sqlcmd mit der Option -l . Dadurch wird implizit die Variable SQLLOGINTIMEOUT festgelegt.
sqlcmd -l 60
Sie können auch die Option -v verwenden, um eine Skriptvariable festzulegen, die in einem Skript vorhanden ist. Im folgenden Skript (der Dateiname lautet testscript.sql) wird ColumnName als Skriptvariable verwendet.
USE AdventureWorks2022;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE x.BusinessEntityID < 5;
Sie können daraufhin den Namen der Spalte angeben, die mithilfe der Option -v zurückgegeben werden soll:
sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql
Ändern Sie den Wert der ColumnName -Skriptvariablen, um eine andere Spalte mithilfe desselben Skripts zurückzugeben.
sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql
Richtlinien für Namen und Werte von Skriptvariablen
Die folgenden Richtlinien sollten bei der Benennung von Skriptvariablen berücksichtigt werden:
Variablennamen dürfen keine Leerzeichen oder Anführungszeichen enthalten.
Variablennamen dürfen nicht die gleiche Form wie Variablenausdrücke (beispielsweise $(var) ) aufweisen.
Bei Skriptvariablen wird nicht zwischen Groß- und Kleinschreibung unterschieden.
Note
Wenn einer sqlcmd -Umgebungsvariablen kein Wert zugewiesen wird, wird die Variable entfernt. Bei Verwendung von
:setvar VarNameohne einen Wert wird die Variable gelöscht.
Die folgenden Richtlinien sollten beim Angeben von Werten für Skriptvariablen berücksichtigt werden:
- Variablenwerte, die mit der Verwendung
setvardefiniert werden, oder die-vOption muss durch Anführungszeichen eingeschlossen werden, wenn der Zeichenfolgenwert Leerzeichen enthält. - Wenn Anführungszeichen Bestandteil des Variablenwerts sind, müssen sie mit Escapezeichen versehen werden. Beispiel: :
setvar MyVar "spac""e".
Richtlinien für Werte und Namen der SET-Variable von Cmd.exe
Mit SET definierte Variablen sind Teil der Cmd.exe-Umgebung, und es kann mit sqlcmd auf sie verwiesen werden. Berücksichtigen Sie die folgenden Richtlinien:
- Variablennamen dürfen keine Leerzeichen oder Anführungszeichen enthalten.
- Variable Werte können Leerzeichen oder Anführungszeichen enthalten.
sqlcmd-Skriptvariablen
| Variable | Verwandte Option | R/W | Default |
|---|---|---|---|
SQLCMDUSER
1 |
-U |
R
2 |
"" |
SQLCMDPASSWORD
1 |
-P |
-- |
"" |
SQLCMDSERVER
1 |
-S |
R
2 |
"DefaultLocalInstance" |
SQLCMDWORKSTATION |
-H |
R
2 |
"ComputerName" |
SQLCMDDBNAME |
-d |
R
2 |
"" |
SQLCMDLOGINTIMEOUT |
-l |
R/W
3 |
"8" (Sekunden) |
SQLCMDSTATTIMEOUT |
-t |
R/W
3 |
"0" = unbegrenzt warten |
SQLCMDHEADERS |
-h |
R/W
3 |
"0" |
SQLCMDCOLSEP |
-s |
R/W
3 |
" " |
SQLCMDCOLWIDTH |
-w |
R/W
3 |
"0" |
SQLCMDPACKETSIZE |
-a |
R
2 |
"4096" |
SQLCMDERRORLEVEL |
-m |
R/W
3 |
"0" |
SQLCMDMAXVARTYPEWIDTH |
-y |
R/W
3 |
"256" |
SQLCMDMAXFIXEDTYPEWIDTH |
-Y |
R/W
3 |
"0" = unbegrenzt |
SQLCMDEDITOR |
R/W
3 |
"edit.com" | |
SQLCMDINI |
R
2 |
"" |
1 SQLCMDUSER, SQLCMDPASSWORD und SQLCMDSERVER werden bei Verwendung von :Connect festgelegt.
2 Durch R wird angezeigt, dass der Wert nur einmal während der Programminitialisierung festgelegt werden kann.
3 R/W gibt an, dass der Wert mithilfe des setvar Befehls zurückgesetzt werden kann, und nachfolgende Befehle verwenden den neuen Wert.
Examples
Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025- oder AdventureWorksDW2025 Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.
A. Verwenden des setvar-Befehls in einem Skript
Viele sqlcmd -Optionen können in einem Skript mithilfe des Befehls setvar gesteuert werden. Im folgenden Beispiel wird das Skript test.sql erstellt, in dem die Variable SQLCMDLOGINTIMEOUT auf 60 Sekunden festgelegt ist. Eine weitere Skriptvariable ( server) wird auf testserverfestgelegt. Der folgende Code befindet sich in test.sql.
:setvar SQLCMDLOGINTIMEOUT 60
:setvar server "testserver"
:connect $(server) -l $(SQLCMDLOGINTIMEOUT)
USE AdventureWorks2022;
SELECT FirstName, LastName
FROM Person.Person;
Das Skript wird anschließend mit „sqlcmd“ aufgerufen:
sqlcmd -i c:\test.sql
B. Interaktives Verwenden des setvar-Befehls
Im folgenden Beispiel wird veranschaulicht, wie eine Skriptvariable mithilfe des setvar -Befehls interaktiv festgelegt wird.
sqlcmd
:setvar MYDATABASE AdventureWorks2022
USE $(MYDATABASE);
GO
Das Resultset sieht wie folgt aus.
Changed database context to 'AdventureWorks2022'
1>
C. Verwenden von Umgebungsvariablen der Eingabeaufforderung in „sqlcmd“
Im folgenden Beispiel werden vier Umgebungsvariablen are festgelegt und dann von sqlcmd aufgerufen.
SET tablename=Person.Person
SET col1=FirstName
SET col2=LastName
SET title=Ms.
sqlcmd -d AdventureWorks2022
1> SELECT TOP 5 $(col1) + ' ' + $(col2) AS Name
2> FROM $(tablename)
3> WHERE Title ='$(title)'
4> GO
D. Verwenden von Umgebungsvariablen auf Benutzerebene in „sqlcmd“
Im folgenden Beispiel wird die Umgebungsvariable %Temp% auf Benutzerebene an der Eingabeaufforderung festgelegt und an die Eingabedatei sqlcmd übergeben. Zum Abrufen der Umgebungsvariable auf Benutzerebene doppelklicken Sie unter Systemsteuerungauf System. Wählen Sie die Registerkarte Erweitert und dann Umgebungsvariablen aus.
In der Eingabedatei C:\testscript.txtist der folgende Code enthalten:
:OUT $(MyTempDirectory)
USE AdventureWorks2022;
SELECT FirstName
FROM AdventureWorks2022.Person.Person
WHERE BusinessEntityID < 5;
Der folgende Code wird an der Eingabeaufforderung eingegeben:
SET MyTempDirectory=%Temp%\output.txt
sqlcmd -i C:\testscript.txt
Das folgende Ergebnis wird an die Ausgabedatei C:\Documents and Settings\<user>\Local Settings\Temp\output.txt gesendet.
Changed database context to 'AdventureWorks2022'.
FirstName
--------------------------------------------------
Gustavo
Catherine
Kim
Humberto
(4 rows affected)
E. Verwenden eines Startskripts
Beim Starten von sqlcmd wird ein sqlcmd -Startskript ausgeführt. Im folgenden Beispiel wird die Umgebungsvariable SQLCMDINIfestgelegt. Dies ist der Inhalt von init.sql.
SET NOCOUNT ON
GO
DECLARE @nt_username nvarchar(128)
SET @nt_username = (SELECT rtrim(convert(nvarchar(128), nt_username))
FROM sys.dm_exec_sessions WHERE spid = @@SPID)
SELECT @nt_username + ' is connected to ' +
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('servername'))) +
' (' +`
rtrim(CONVERT(nvarchar(20), SERVERPROPERTY('productversion'))) +
')'
:setvar SQLCMDMAXFIXEDTYPEWIDTH 100
SET NOCOUNT OFF
GO
:setvar SQLCMDMAXFIXEDTYPEWIDTH
Damit wird die Datei init.sql beim Starten von sqlcmd aufgerufen.
SET sqlcmdini=c:\init.sql
sqlcmd
Dies ist die Ausgabe.
1> <user> is connected to <server> (9.00.2047.00)
Note
Mit der Option -X wird die Startskriptfunktion deaktiviert.
F. Variable Erweiterung
Im folgenden Beispiel wird die Verwendung von Daten in Form einer sqlcmd -Variablen veranschaulicht.
USE AdventureWorks2022;
GO
CREATE TABLE AdventureWorks2022.dbo.VariableTest (Col1 NVARCHAR(50));
GO
Fügen Sie eine Zeile in Col1 von dbo.VariableTest ein, in der der Wert $(tablename)enthalten ist.
INSERT INTO AdventureWorks2022.dbo.VariableTest (Col1)
VALUES ('$(tablename)');
GO
Wenn an der Eingabeaufforderung sqlcmd keine Variable den Wert $(tablename) aufweist, geben die folgenden Anweisungen die Zeile sowie die Meldung „Die tablename-Skriptvariable ist nicht definiert“ aus. Das sqlcmd-Flag -b ist standardmäßig nicht festgelegt. Wenn -b festgelegt ist, wird sqlcmd nach dem Fehler „Variable nicht definiert“ beendet.
sqlcmd
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
2> GO
3> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
4> GO
Das Resultset sieht wie folgt aus.
1> Col1
2> ------------------
3> $(tablename)
4>
5> (1 rows affected)
Es wird angenommen, dass die Variable MyVar auf $(tablename)festgelegt ist.
6> :setvar MyVar $(tablename)
Die Zeile wird mit diesen Anweisungen zurückgegeben. Außerdem wird die Meldung "Die 'tablename'-Skriptvariable ist nicht definiert." zurückgegeben.
6> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
7> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
2> GO
Die Zeile wird mit diesen Anweisungen zurückgegeben.
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(MyVar)';
2> GO
1> SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(MyVar)';
2> GO
Verwandte Inhalte
- Weitere Informationen zum Sqlcmd -Hilfsprogramm (Go) auf GitHub
- Schnellstart: Ausführen von SQL Server Linux-Containerimages mit Docker
- Starten des Hilfsprogramms „sqlcmd“
- Ausführen von T-SQL aus einer Skriptdatei mit sqlcmd
- Verwenden des Hilfsprogramms
- Verwenden von sqlcmd mit Skriptvariablen
- Herstellen einer Verbindung mit SQL Server mit sqlcmd
- Bearbeiten von SQLCMD-Skripts mit dem Abfrage-Editor
- Verwalten von Auftragsschritten
- Erstellen eines CmdExec-Auftragsschritts