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.
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 Befehls "setvar " oder implizit mithilfe der Option "sqlcmd-v " definiert werden.
Dieses Thema enthält auch Beispiele zum Definieren von Umgebungsvariablen an der Cmd.exe Eingabeaufforderung mithilfe von SET.
Festlegen von Skriptvariablen mithilfe des Setvar-Befehls
Der Befehl setvar wird zum Definieren von Skriptvariablen verwendet. Mithilfe des Befehls setvar definierte Variablen werden intern gespeichert. Skriptvariablen sollten nicht mit Umgebungsvariablen verwechselt werden, die an der Eingabeaufforderung mithilfe von SET definiert sind. Wenn ein Skript auf eine Variable verweist, die keine Umgebungsvariable ist oder nicht mithilfe von Setvar definiert wird, wird eine Fehlermeldung zurückgegeben, und die Ausführung des Skripts wird beendet. Weitere Informationen finden Sie in der Option "-b " im Sqlcmd-Hilfsprogramm.
Variable Präzedenz (Niedrig bis Hoch)
Wenn mehrere Variablentypen denselben Namen aufweisen, wird die Variable mit der höchsten Rangfolge verwendet.
Umgebungsvariablen auf Systemebene
Umgebungsvariablen auf Benutzerebene
Befehlsshell (SET X=Y) wird an der Eingabeaufforderung festgelegt, bevor sqlcmd gestartet wird
sqlcmd-v X=Y
:Setvar X Y
Hinweis
Um die Umgebungsvariablen anzuzeigen, öffnen Sie in der SystemsteuerungDas System, und klicken Sie dann auf die Registerkarte "Erweitert ".
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 die SQLLOGINTIMEOUT-Variable implizit festgelegt.
c:\> 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 AdventureWorks2012;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE c.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 Skript-Variablennamen und -werte
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.
Hinweis
Wenn einer sqlcmd -Umgebungsvariablen kein Wert zugewiesen wird, wird die Variable entfernt. Wenn Sie :setvar VarName ohne einen Wert verwenden, wird die Variable gelöscht.
Die folgenden Richtlinien sollten beim Angeben von Werten für Skriptvariablen berücksichtigt werden:
Variablenwerte, die mithilfe von Setvar oder der Option -v definiert werden, müssen 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 Cmd.exe SET-Variablenwerte und -namen
Variablen, die mithilfe von SET definiert werden, sind Teil der Cmd.exe Umgebung und können von sqlcmd referenziert werden. Berücksichtigen Sie die folgenden Richtlinien:
Variablennamen dürfen keine Leerzeichen oder Anführungszeichen enthalten.
Variablenwerte dürfen Leerzeichen oder Anführungszeichen enthalten.
sqlcmd Skriptvariablen
Mithilfe von sqlcmd definierte Variablen werden als Skriptvariablen bezeichnet. In der folgenden Tabelle sind die sqlcmd -Skriptvariablen aufgelistet.
| Variable | Zugehörige Option | R/W | Standard |
|---|---|---|---|
| SQLCMDUSER* | -U | R | "" |
| SQLCMDPASSWORD* | -P | -- | "" |
| SQLCMDSERVER* | -S | R | StandardlokaleInstanz |
| SQLCMDWORKSTATION | -H | R | Computername |
| SQLCMDDBNAME | -d | R | "" |
| SQLCMDLOGINTIMEOUT | -l | R/W | "8" (Sekunden) |
| SQLCMDSTATTIMEOUT | -t | R/W | "0" = unbegrenzt warten |
| SQLCMDHEADERS | -h | R/W | 0 |
| SQLCMDCOLSEP | -s | R/W | " " |
| SQLCMDCOLWIDTH | -w | R/W | 0 |
| SQLCMDPACKETSIZE | -ein | R | "4096" |
| SQLCMDERRORLEVEL | -m | R/W | "0" |
| SQLCMDMAXVARTYPEWIDTH | -y | R/W | "256" |
| SQLCMDMAXFIXEDTYPEWIDTH | -Y | R/W | "0" = unbegrenzt |
| SQLCMDEDITOR | R/W | edit.com | |
| SQLCMDINI | R | "" |
* SQLCMDUSER, SQLCMDPASSWORD und SQLCMDSERVER werden festgelegt, wenn :Connect verwendet wird.
R gibt an, dass der Wert nur einmal während der Programminitialisierung festgelegt werden kann.
R/W gibt an, dass der Wert mithilfe des Setvar-Befehls zurückgesetzt werden kann, und nachfolgende Befehle verwenden den neuen Wert.
Beispiele
Ein. 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 AdventureWorks2012;
SELECT FirstName, LastName
FROM Person.Person;
The script is then called by using sqlcmd:
sqlcmd -i c:\test.sql
B. Interaktive Verwendung des Setvar-Befehls
Im folgenden Beispiel wird veranschaulicht, wie eine Skriptvariable mithilfe des setvar -Befehls interaktiv festgelegt wird.
sqlcmd
:setvar MYDATABASE AdventureWorks2012
USE $(MYDATABASE);
GO
Dies ist die Ergebnismenge.
Changed database context to 'AdventureWorks2012'
1>
C. Verwenden von Befehlszeilenumgebungsvariablen in sqlcmd
Im folgenden Beispiel werden vier Umgebungsvariablen are festgelegt und dann von sqlcmd aufgerufen.
C:\>SET tablename=Person.Person
C:\>SET col1=FirstName
C:\>SET col2=LastName
C:\>SET title=Ms.
C:\>sqlcmd -d AdventureWorks2012
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 sqlcmd Eingabedatei übergeben. Zum Abrufen der Umgebungsvariable auf Benutzerebene doppelklicken Sie unter Systemsteuerungauf System. Klicken Sie auf die Registerkarte "Voraus ", und klicken Sie dann auf "Umgebungsvariablen".
In der Eingabedatei c:\testscript.txtist der folgende Code enthalten:
:OUT $(MyTempDirectory)
USE AdventureWorks2012;
SELECT FirstName
FROM AdventureWorks2012.Person.Person
WHERE BusinessEntityID
< 5;
Der folgende Code wird an der Eingabeaufforderung eingegeben:
C:\ >SET MyTempDirectory=%Temp%\output.txt
C:\ >sqlcmd -i C:\testscript.txt
Das folgende Ergebnis wird an die Ausgabedatei C:\Dokumente und Einstellungen\<Benutzer>\Local Settings\Temp\output.txtgesendet.
Changed database context to 'AdventureWorks2012'.
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.
C:\> SET sqlcmdini=c:\init.sql
>1 Sqlcmd
Dies ist die Ausgabe.
>1 < user > is connected to < server > (9.00.2047.00)
Hinweis
Die Option "-X " deaktiviert das Startskriptfeature.
F. Variablenerweiterung
Im folgenden Beispiel wird die Verwendung von Daten in Form einer sqlcmd -Variablen veranschaulicht.
USE AdventureWorks2012;
CREATE TABLE AdventureWorks2012.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 AdventureWorks2012.dbo.VariableTest(Col1)
VALUES('$(tablename)');
GO
Bei der sqlcmd-Eingabeaufforderung, wenn keine Variable gleich $(tablename) gesetzt wird, geben die folgenden Anweisungen die Zeile zurück.
C:\> sqlcmd
>1 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = '$(tablename)';
>2 GO
>3 SELECT Col1 FROM dbo.VariableTest WHERE Col1 = N'$(tablename)';
>4 GO
Hier ist die Ergebnismenge.
>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
Siehe auch
Verwenden des Hilfsprogramms sqlcmd
sqlcmd Utility
Referenz zum Eingabeaufforderung-Hilfsprogramm (Datenbank-Engine)