Verwenden des Hilfsprogramms sqlcmd
Das sqlcmd
Hilfsprogramm ist ein Befehlszeilenprogramm für die interaktive Ad-hoc-Ausführung von Transact-SQL-Anweisungen und -Skripts sowie für die Automatisierung von Transact-SQL-Skriptaufgaben. Um interaktiv zu verwenden sqlcmd
oder Skriptdateien zu erstellen, die mit sqlcmd
ausgeführt werden sollen, müssen Benutzer Transact-SQL verstehen. Das Hilfsprogramm sqlcmd
wird in der Regel wie folgt verwendet:
Benutzer geben Transact-SQL-Anweisungen interaktiv ein, ähnlich wie an der Eingabeaufforderung. Die Ergebnisse werden an der Eingabeaufforderung angezeigt. Klicken Sie auf Start, Alle Programme, zeigen Sie auf Zubehör, und klicken Sie dann auf Eingabeaufforderung, um das Eingabeaufforderungsfenster zu öffnen. Geben Sie an der Eingabeaufforderung
sqlcmd
ein, gefolgt von einer Liste der gewünschten Optionen. Eine vollständige Liste der Optionen, die vonsqlcmd
unterstützt werden, finden Sie unter sqlcmd-Hilfsprogramm.Benutzer übermitteln einen
sqlcmd
Auftrag, indem sie entweder eine einzelne auszuführende Transact-SQL-Anweisung angeben oder das Hilfsprogramm auf eine Textdatei verweisen, die auszuführende Transact-SQL-Anweisungen enthält. Die Ausgabe wird normalerweise in einer Textdatei gespeichert, sie kann jedoch auch an der Eingabeaufforderung angezeigt werden.SQLCMD-Modus im Abfrage-Editor von SQL Server Management Studio.
SQL Server Management Objects (SMO)
CmdExec-Aufträge des SQL Server-Agents.
Normalerweise verwendete Optionen für sqlcmd
Die folgenden Optionen werden am häufigsten verwendet:
Die Serveroption (-S), die die instance von Microsoft SQL Server identifiziert, mit der eine
sqlcmd
Verbindung hergestellt wird.Authentifizierungsoptionen (-E, -U und -P), die die Anmeldeinformationen angeben,
sqlcmd
die zum Herstellen einer Verbindung mit dem instance von SQL Server verwendet werden.Hinweis
Die Option -E ist die Standardeinstellung und muss nicht angegeben werden.
Eingabeoptionen (-Q, -q und -i), die den Speicherort der Eingabe in
sqlcmd
identifizieren.Die Ausgabeoption (-o), die die Datei angibt, in der die
sqlcmd
Ausgabe abgelegt werden soll.
Herstellen einer Verbindung mit dem Hilfsprogramm "sqlcmd"
Das Hilfsprogramm sqlcmd
wird häufig für folgende Aufgaben verwendet:
Herstellen einer Verbindung mit einer Standardinstanz mithilfe der Windows-Authentifizierung, um Transact-SQL-Anweisungen interaktiv auszuführen:
sqlcmd -S <ComputerName>
Hinweis
Im vorherigen Beispiel wird -E nicht angegeben, da es sich um die Standardeinstellung handelt und
sqlcmd
eine Verbindung mit der Standard-instance über die Windows-Authentifizierung herstellt.Herstellen einer Verbindung mit einer benannten Instanz mithilfe der Windows-Authentifizierung, um Transact-SQL-Anweisungen interaktiv auszuführen:
sqlcmd -S <ComputerName>\<InstanceName>
oder
sqlcmd -S .\<InstanceName>
Herstellen einer Verbindung mit einer benannten Instanz mithilfe der Windows-Authentifizierung und Angeben von Eingabe- und Ausgabedateien:
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
Herstellen einer Verbindung mit der Standardinstanz auf dem lokalen Computer mithilfe der Windows-Authentifizierung, wobei eine Abfrage ausgeführt wird und
sqlcmd
nach Abschluss der Abfrage weiterhin ausgeführt wird:sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"
Herstellen einer Verbindung mit der Standardinstanz auf dem lokalen Computer mithilfe der Windows-Authentifizierung, wobei eine Abfrage ausgeführt, die Ausgabe an eine Datei weitergeleitet und
sqlcmd
nach Abschluss der Abfrage beendet wird:sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt
Herstellen einer Verbindung mit einem benannten instance mithilfe von SQL Server-Authentifizierung, um Transact-SQL-Anweisungen interaktiv auszuführen, mit
sqlcmd
der Aufforderung zur Eingabe eines Kennworts:sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
Hinweis
Eine vollständige Liste der von
sqlcmd
unterstützten Optionen erhalten Sie, indem Sie folgenden Befehl ausführen:sqlcmd -?
.
Interaktives Ausführen von Transact-SQL-Anweisungen mithilfe von "sqlcmd"
Sie können das sqlcmd
Hilfsprogramm interaktiv verwenden, um Transact-SQL-Anweisungen in einem Eingabeaufforderungsfenster auszuführen. Um Transact-SQL-Anweisungen interaktiv mit sqlcmd
auszuführen, führen Sie das Hilfsprogramm aus, ohne die Optionen -Q, -q, -Z oder -i zum Angeben von Eingabedateien oder Abfragen zu verwenden. Beispiel:
sqlcmd -S <ComputerName>\<InstanceName>
Wenn der Befehl ohne Eingabedateien oder Abfragen ausgeführt wird, sqlcmd
stellt eine Verbindung mit der angegebenen instance von SQL Server her und zeigt dann eine neue Zeile mit einem 1>
gefolgt von einem blinkenden Unterstrich an, der als sqlcmd
Eingabeaufforderung bezeichnet wird. Gibt 1
an, dass dies die erste Zeile einer Transact-SQL-Anweisung ist, und die sqlcmd
Eingabeaufforderung ist der Punkt, an dem die Transact-SQL-Anweisung beginnt, wenn Sie sie eingeben.
An der sqlcmd
Eingabeaufforderung können Sie sowohl Transact-SQL-Anweisungen als sqlcmd
auch Befehle eingeben, z GO
. B. und EXIT
. Die einzelnen Transact-SQL-Anweisungen werden in einen Puffer geladen, den sogenannten Anweisungscache. Diese Anweisungen werden an SQL Server gesendet, nachdem Sie den Befehl eingegeben und die GO
EINGABETASTE gedrückt haben. Um zu beenden sqlcmd
, geben Sie EXIT
oder QUIT
am Anfang einer neuen Zeile ein.
Den Anweisungscache können Sie löschen, indem Sie :RESET
eingeben. Die ^C
Eingabe führt sqlcmd
zum Beenden. ^C
kann auch dazu verwendet werden, die Ausführung des Anweisungscaches zu beenden, nachdem ein GO
-Befehl ausgegeben wurde.
Transact-SQL-Anweisungen, die in einer interaktiven Sitzung eingegeben werden, können bearbeitet werden, indem Sie den Befehl :ED und die sqlcmd
Eingabeaufforderung eingeben. Der Editor wird geöffnet. Nachdem Sie die Transact-SQL-Anweisung bearbeitet und den Editor geschlossen haben, wird die überarbeitete Transact-SQL-Anweisung im Eingabeaufforderungsfenster angezeigt. Geben Sie ein GO
, um die angezeigte Transact-SQL-Anweisung auszuführen.
Zeichenfolgen in Anführungszeichen
Zeichen, die in Anführungszeichen eingeschlossen sind, werden ohne weitere Vorverarbeitung verwendet. Die einzige Ausnahme besteht darin, dass Anführungszeichen durch das Eingeben von zwei aufeinander folgenden Anführungszeichen in eine Zeichenfolge eingefügt werden können. SQL Server In wird diese Zeichenfolgensequenz als ein Anführungszeichen behandelt. (Die Übersetzung erfolgt jedoch auf dem Server.) Skriptvariablen werden nicht erweitert, wenn sie innerhalb einer Zeichenfolge auftreten.
Beispiel:
sqlcmd
PRINT "Length: 5"" 7'";
GO
Hier ist das Resultset.
Length: 5" 7'
Mehrere Zeilen umfassende Zeichenfolgen
Bei sqlcmd
werden Skripts mit Zeichenfolgen, die mehrere Zeilen umfassen, unterstützt. Beispielsweise umfasst die folgende SELECT
-Anweisung mehrere Zeilen; es handelt sich jedoch um eine einzelne Zeichenfolge, die ausgeführt wird, wenn Sie GO
eingeben und anschließend die EINGABETASTE drücken.
SELECT First line
FROM Second line
WHERE Third line;
GO
Beispiel für die interaktive Verwendung von "sqlcmd"
In diesem Beispiel wird veranschaulicht, was bei der interaktiven Ausführung von sqlcmd
angezeigt wird.
Wenn Sie ein Eingabeaufforderungsfenster öffnen, wird nur eine Zeile ähnlich der Folgenden angezeigt:
C:\> _
Dies bedeutet, dass der Ordner C:\
der aktuelle Ordner ist. Wenn Sie einen Dateinamen angeben, wird in Windows in diesem Ordner nach der Datei gesucht.
Geben Sie einsqlcmd
, um eine Verbindung mit der Standard-instance von SQL Server auf dem lokalen Computer herzustellen, und der Inhalt des Eingabeaufforderungsfensters lautet:
C:\>sqlcmd
1> _
Dies bedeutet, dass Sie eine Verbindung mit dieser Instanz von SQL Server hergestellt haben und von sqlcmd
ab sofort Transact-SQL-Anweisungen und sqlcmd
-Befehle akzeptiert werden. Der blinkende Unterstrich hinter der 1>
ist die sqlcmd
-Aufforderung. Damit wird die Stelle gekennzeichnet, an der die von Ihnen eingegebenen Anweisungen und Befehle angezeigt werden. Geben Sie nun ein USE AdventureWorks2012
, drücken Sie die EINGABETASTE, und geben Sie dann die EINGABETASTE ein GO
, und drücken Sie sie. Im Eingabeaufforderungsfensters wird der folgende Text angezeigt:
sqlcmd
USE AdventureWorks2012;
GO
Hier ist das Resultset.
Changed database context to 'AdventureWorks2012'.
1> _
Durch das Drücken der EINGABETASTE nach dem Eingeben von USE AdventureWorks2012
wurde sqlcmd
angewiesen, eine neue Zeile zu beginnen. Durch das Drücken der EINGABETASTE nach dem Eingeben von GO,
wurde sqlcmd
angewiesen, die USE AdventureWorks2012
-Anweisung an die Instanz von SQL Serverzu senden. sqlcmd
Anschließend wurde von sqlcmd die Meldung zurückgegeben, dass die USE
-Anweisung erfolgreich ausgeführt wurde, und es wurde eine neue 1>
-Eingabeaufforderung als Hinweis zum Eingeben einer neuen Anweisung oder eines neuen Befehls angezeigt.
Im folgenden Beispiel wird gezeigt, was im Eingabeaufforderungsfenster angezeigt wird, wenn Sie eine SELECT
-Anweisung, eine GO
-Anweisung zum Ausführen von SELECT
und anschließend EXIT
eingeben, um sqlcmd
zu beenden:
sqlcmd
USE AdventureWorks2012;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Hier ist das Resultset.
BusinessEntityID FirstName LastName
----------- -------------------------------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
1> EXIT
C:\>
Bei den Zeilen im Anschluss an die Zeile 3> GO
handelt es sich um die Ausgabe einer SELECT
-Anweisung. Nach dem Generieren einer Ausgabe wird die sqlcmd
-Eingabeaufforderung durch sqlcmd
zurückgesetzt, und es wird 1>
angezeigt. Nach der Eingabe von EXIT
in der Zeile 1>
wird im Eingabeaufforderungsfenster dieselbe Zeile wie beim ersten Öffnen der Eingabeaufforderung angezeigt. Dies bedeutet, dass die Sitzung von sqlcmd
beendet ist. Sie können das Eingabeaufforderungsfenster nun schließen, indem Sie einen weiteren EXIT
-Befehl eingeben.
Ausführen von Transact-SQL-Skriptdateien mithilfe von "sqlcmd"
Sie können sqlcmd
zum Ausführen von Datenbankskriptdateien verwenden. Skriptdateien sind Textdateien, die eine Mischung aus Transact-SQL-Anweisungen, sqlcmd
Befehlen und Skriptvariablen enthalten. Weitere Informationen zum Definieren von Skriptvariablen finden Sie unter Verwenden von sqlcmd mit Skriptvariablen. In sqlcmd
werden Anweisungen, Befehle und Skriptvariablen in einer Skriptdatei verwendet, ähnlich wie bei der Verwendung interaktiv eingegebener Anweisungen und Befehle. Der Hauptunterschied besteht darin, dass die Eingabedatei von sqlcmd
ohne Pause durchgelesen wird, anstatt darauf zu warten, dass ein Benutzer die Anweisungen, Befehle und Skriptvariablen eingibt.
Es gibt verschiedene Möglichkeiten, um Datenbankskriptdateien zu erstellen:
Sie können eine Reihe von Transact-SQL-Anweisungen interaktiv in SQL Server Management Studio erstellen und debuggen und anschließend den Inhalt des Abfragefensters als Skriptdatei speichern.
Sie können eine Textdatei mit Transact-SQL-Anweisungen mithilfe eines Text-Editors (z. B. Editor) erstellen.
Beispiele
A. Ausführen eines Skripts mithilfe von "sqlcmd"
Starten Sie Editor, und geben Sie die folgenden Transact-SQL-Anweisungen ein:
USE AdventureWorks2012;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Erstellen Sie einen neuen Ordner mit dem Namen MyFolder
, und speichern Sie das Skript als Datei MyScript.sql
im Ordner C:\MyFolder
. Geben Sie die folgende Eingabeaufforderung ein, um das Skript auszuführen, und speichern Sie die Ausgabe in MyOutput.txt
im Ordner MyFolder
:
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
Wenn Sie den Inhalt von MyOutput.txt
in Editor anzeigen, sehen Sie Folgendes:
Changed database context to 'AdventureWorks2012'.
BusinessEntityID FirstName LastName
---------------- ----------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
B. Verwenden von "sqlcmd" mit einer dedizierten Verwaltungsverbindung
Im folgenden Beispiel wird mithilfe von sqlcmd
eine Verbindung mit einem Server hergestellt, der Blockierungsprobleme aufweist. Dies erfolgt mithilfe einer dedizierten Administratorverbindung (Dedicated Administrator Connection, DAC).
C:\>sqlcmd -S ServerName -A
1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;
2> GO
Hier ist das Resultset.
spid blocked
------ -------
62 64
(1 rows affected)
Beenden Sie den Blockierungsprozess mithilfe von sqlcmd
.
1> KILL 64;
2> GO
C. Verwenden von "sqlcmd" zum Ausführen einer gespeicherten Prozedur
Im folgenden Beispiel wird veranschaulicht, wie eine gespeicherte Prozedur mithilfe von sqlcmd
ausgeführt wird. Erstellen Sie die folgende gespeicherte Prozedur.
USE AdventureWorks2012;
IF OBJECT_ID ( ' dbo.ContactEmailAddress, 'P' ) IS NOT NULL
DROP PROCEDURE dbo.ContactEmailAddress;
GO
CREATE PROCEDURE dbo.ContactEmailAddress
(
@FirstName nvarchar(50)
,@LastName nvarchar(50)
)
AS
SET NOCOUNT ON
SELECT EmailAddress
FROM Person.Person
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF
Geben Sie an der sqlcmd
-Eingabeaufforderung Folgendes ein:
C:\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D: Verwenden von "sqlcmd" für die Datenbankwartung
Im folgenden Beispiel wird veranschaulicht, wie mithilfe von sqlcmd
Datenbankwartungstasks ausgeführt werden können. Erstellen Sie C:\BackupTemplate.sql
mit dem folgenden Code.
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
Geben Sie an der sqlcmd
-Eingabeaufforderung Folgendes ein:
C:\ >sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile c:\msdb.bak
1> :r c:\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)
E. Verwenden von "sqlcmd" zum Ausführen von Code auf mehreren Instanzen
Mit dem folgenden Code wird in einer Datei ein Skript angezeigt, mit dem eine Verbindung mit zwei Instanzen hergestellt wird. Beachten Sie die GO
-Anweisung vom dem Herstellen einer Verbindung mit der zweiten Instanz.
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
E. Zurückgeben einer XML-Ausgabe
Im folgenden Beispiel wird gezeigt, wie eine XML-Ausgabe unformatiert in einem fortlaufenden Datenstrom zurückgegeben wird.
C:\>sqlcmd -d AdventureWorks2012
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,
F. Verwenden von "sqlcmd" in einer Windows-Skriptdatei
Ein sqlcmd
Befehl wie sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt,
kann in einer .bat-Datei zusammen mit VBScript ausgeführt werden. In diesem Fall werden keine interaktiven Optionen verwendet. sqlcmd
muss auf dem Computer installiert sein, auf dem die BAT-Datei ausgeführt wird.
Erstellen Sie zunächst die folgenden vier Dateien:
C:\badscript.sql
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
C:\goodscript.sql
SELECT 'batch #1' GO SELECT 'batch #2' GO
C:\returnvalue.sql
:exit(select 100) @echo off C:\windowsscript.bat @echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
C:\windowsscript.bat
@echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
Führen Sie anschließend an der Eingabeaufforderung C:\windowsscript.bat
aus:
C:\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql
SQLCMD returned 100 to the command shell
G. Verwenden von „sqlcmd“ zum Festlegen der Verschlüsselung für eine Azure SQL-Datenbank
Ein sqlcmd
kann für eine Verbindung mit SQL-Datenbank Daten auf ausgeführt werden, um Verschlüsselung und Zertifikatvertrauen anzugeben. Es stehen zwei 'sqlcmd''-Optionen zur Verfügung:
Der Schalter "-N" wird vom Client verwendet, um eine verschlüsselte Verbindung anzufordern. Diese Option entspricht der ADO.NET-Option
ENCRYPT = true
.Der Switch „–C“ wird vom Client verwendet, um ihn so zu konfigurieren, dass dem Serverzertifikat implizit vertraut wird, ohne es zu überprüfen. Diese Option entspricht der ADO.NET-Option
TRUSTSERVERCERTIFICATE = true
.
Der SQL-Datenbank -Dienst unterstützt nicht alle SET
-Optionen, die für eine SQL Server-Instanz verfügbar sind. Die folgenden Optionen lösen einen Fehler aus, wenn die entsprechende SET
-Option auf ON
oder OFF
festgelegt wird:
SET ANSI_DEFAULTS
SET ANSI_NULLS
SET REMOTE_PROC_TRANSACTIONS
SET ANSI_NULL_DEFAULT
Die folgenden SET-Optionen lösen zwar keine Ausnahmen aus, können jedoch nicht verwendet werden. Sie sind veraltet:
SET CONCAT_NULL_YIELDS_NULL
SET ANSI_PADDING
SET QUERY_GOVERNOR_COST_LIMIT
Syntax
Die folgenden Beispiele beziehen sich auf Fälle,in denen SQL Server Native Client-Anbieter-Einstellungen Folgendes umfasst: ForceProtocolEncryption = False
, Trust Server Certificate = No
Verbindung mit Windows-Anmeldeinformationen herstellen und Kommunikation verschlüsseln:
SQLCMD -E -N
Verbindung mit Windows-Anmeldeinformationen herstellen und Serverzertifikat vertrauen:
SQLCMD -E -C
Verbindung mit Windows-Anmeldeinformationen herstellen, Kommunikation verschlüsseln und Serverzertifikat vertrauen:
SQLCMD -E -N -C
Die folgenden Beispiele beziehen sich auf zwei Fälle, in denen SQL Server Native Client-Anbieter-Einstellungen wie folgt lauten: ForceProtocolEncryption = True
, TrustServerCertificate = Yes
.
Verbindung mit Windows-Anmeldeinformationen herstellen, Kommunikation verschlüsseln und Serverzertifikat vertrauen:
SQLCMD -E
Verbindung mit Windows-Anmeldeinformationen herstellen, Kommunikation verschlüsseln und Serverzertifikat vertrauen:
SQLCMD -E -N
Verbindung mit Windows-Anmeldeinformationen herstellen, Kommunikation verschlüsseln und Serverzertifikat vertrauen:
SQLCMD -E -T
Verbindung mit Windows-Anmeldeinformationen herstellen, Kommunikation verschlüsseln und Serverzertifikat vertrauen:
SQLCMD -E -N -C
Wenn der Anbieter ForceProtocolEncryption = True
angibt, wird die Verschlüsselung aktiviert, auch wenn die Verbindungszeichenfolge Encrypt=No
enthält.
Weitere Informationen
SQLCMD-Hilfsprogramm
Verwenden von sqlcmd mit Skriptvariablen
Bearbeiten von SQLCMD-Skripts mit dem Abfrage-Editor
Verwalten von Auftragsschritten
Erstellen eines CmdExec-Auftragsschritts