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.
Das sqlcmd Nutzprogramm ist ein Befehlszeilenprogramm für die ad-hoc-interaktive Ausführung von Transact-SQL-Anweisungen und -Skripts sowie zum Automatisieren von Transact-SQL-Skriptaufgaben. Um sqlcmd interaktiv zu nutzen oder Skriptdateien zu erstellen, die mit sqlcmd ausgeführt werden sollen, müssen Benutzer Transact-SQL verstehen. Das sqlcmd Hilfsprogramm wird in der Regel auf folgende Weise verwendet:
Benutzer geben interaktiv Transact-SQL-Befehle ein, ähnlich wie bei der Arbeit mit der Eingabeaufforderung. Die Ergebnisse werden an der Eingabeaufforderung angezeigt. Um ein Eingabeaufforderungsfenster zu öffnen, klicken Sie auf "Start", klicken Sie auf "Alle Programme", zeigen Sie auf " Zubehör", und klicken Sie dann auf " Eingabeaufforderung". Geben Sie an der Eingabeaufforderung
sqlcmdein, gefolgt von einer Liste der gewünschten Optionen. Eine vollständige Liste der Optionen, die vonsqlcmdsqlcmd Utility unterstützt werden, finden Sie unter sqlcmd Utility.Benutzer übermitteln einen
sqlcmdAuftrag entweder durch Angeben einer einzelnen auszuführenden Transact-SQL-Anweisung oder indem das Hilfsprogramm auf eine Textdatei verwiesen wird, die Transact-SQL auszuführende Anweisungen enthält. Die Ausgabe wird in der Regel an eine Textdatei weitergeleitet, kann aber auch im Befehlszeilenfenster angezeigt werden.SQLCMD-Modus im SQL Server Management Studio-Abfrage-Editor.
SQL Server-Verwaltungsobjekte (SMO)
CmdExec-Aufträge des SQL Server-Agents.
In der Regel verwendete sqlcmd-Optionen
Die folgenden Optionen werden am häufigsten verwendet:
Die Serveroption (-S), die die Instanz von Microsoft SQL Server identifiziert, mit der
sqlcmdeine Verbindung hergestellt wird.Authentifizierungsoptionen (-E, -U und -P), die die Anmeldeinformationen angeben, die
sqlcmdzum Herstellen einer Verbindung mit der Instanz von SQL Server verwendet werden.Hinweis
Die Option -E ist der Standardwert und muss nicht angegeben werden.
Eingabeoptionen (-Q, -q und -i), die die Position der Eingabe bestimmen.
sqlcmdDie Ausgabeoption (-o), die die Datei angibt, in der
sqlcmddie Ausgabe abgelegt werden soll.
Herstellen einer Verbindung mit dem sqlcmd-Hilfsprogramm
Im Folgenden finden Sie allgemeine Verwendungsmöglichkeiten des sqlcmd Hilfsprogramms:
Herstellen einer Verbindung mit einer Standardinstanz mithilfe der Windows-Authentifizierung zum interaktiven Ausführen von Transact-SQL Anweisungen:
sqlcmd -S <ComputerName>Hinweis
Im vorherigen Beispiel wird "-E" nicht angegeben, da es sich um die Standardinstanz handelt und
sqlcmdmithilfe der Windows-Authentifizierung eine Verbindung mit der Standardinstanz herstellt.Herstellen einer Verbindung mit einer benannten Instanz mithilfe der Windows-Authentifizierung zum interaktiven Ausführen von Transact-SQL Anweisungen:
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, Ausführen einer Abfrage und dass
sqlcmdnach Abschluss der Ausführung der Abfrage weiterhin läuft:sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"Herstellen einer Verbindung mit der Standardinstanz auf dem lokalen Computer mithilfe der Windows-Authentifizierung, Ausführen einer Abfrage, Weiterleiten der Ausgabe zu einer Datei und
sqlcmdBeenden nach Abschluss der Ausführung der Abfrage:sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txtHerstellen einer Verbindung mit einer benannten Instanz mithilfe der SQL Server-Authentifizierung zum interaktiven Ausführen von Transact-SQL Anweisungen mit
sqlcmdAufforderung zur Eingabe eines Kennworts:sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>Hinweis
So zeigen Sie eine Liste der Optionen an, die vom
sqlcmdHilfsprogramm unterstützt werden: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. Führen Sie das Hilfsprogramm aus, um Transact-SQL-Anweisungen interaktiv mit sqlcmd auszuführen, ohne die Optionen -Q, -q, -Z oder -i zu verwenden, um Eingabedateien oder Abfragen anzugeben. Beispiel:
sqlcmd -S <ComputerName>\<InstanceName>
Wenn der Befehl ohne Eingabedateien oder Abfragen ausgeführt wird, stellt sqlcmd eine Verbindung mit der angegebenen Instanz von SQL Server her und zeigt dann eine neue Zeile mit einem blinkenden Unterstrich, der als sqlcmd Eingabeaufforderung bezeichnet wird, an. Dies 1 bedeutet, 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 auch sqlcmd Befehle eingeben, wie zum Beispiel GO und EXIT. Jede Transact-SQL-Anweisung wird in einen Puffer mit dem Namen "Anweisungscache" gesetzt. Diese Anweisungen werden an SQL Server gesendet, nachdem Sie den GO Befehl eingegeben und die EINGABETASTE gedrückt haben. Um sqlcmd zu verlassen, geben Sie EXIT oder QUIT am Anfang einer neuen Zeile ein.
Den Anweisungscache können Sie löschen, indem Sie :RESET eingeben. Durch die Eingabe von ^C wird sqlcmd beendet.
^C kann auch verwendet werden, um 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, und nach der Bearbeitung der Transact-SQL-Anweisung und dem Schließen des Editors wird die überarbeitete Transact-SQL-Anweisung im Befehlsfenster angezeigt. Geben Sie GO ein, um die überarbeitete Anweisung Transact-SQL 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 behandelt diese Zeichenfolge als ein Anführungszeichen. (Die Übersetzung erfolgt jedoch auf dem Server.) Skriptingvariablen werden nicht erweitert, wenn sie in einer Zeichenfolge angezeigt werden.
Beispiel:
sqlcmd
PRINT "Length: 5"" 7'";
GO
Dies ist die Ergebnismenge.
Length: 5" 7'
Zeichenfolgen, die mehrere Zeilen umfassen
sqlcmd unterstützt Skripts mit Zeichenfolgen, die mehrere Zeilen umfassen. Die folgende SELECT Anweisung erstreckt sich beispielsweise über mehrere Zeilen, ist jedoch eine einzelne Zeichenfolge, die ausgeführt wird, wenn Sie nach der Eingabe GOdie EINGABETASTE drücken.
SELECT First line
FROM Second line
WHERE Third line;
GO
Interaktives sqlcmd-Beispiel
Dies ist ein Beispiel dafür, was Sie sehen, wenn Sie sqlcmd interaktiv ausführen.
Wenn Sie ein Eingabeaufforderungsfenster öffnen, ist eine Zeile ähnlich wie folgt:
C:\> _
Dies bedeutet, dass der Ordner C:\ der aktuelle Ordner ist, und wenn Sie einen Dateinamen angeben, sucht Windows nach der Datei in diesem Ordner.
Geben Sie den Typ sqlcmd ein, um eine Verbindung mit der Standardinstanz von SQL Server auf dem lokalen Computer herzustellen, und der Inhalt des Eingabeaufforderungsfensters lautet:
C:\>sqlcmd
1> _
Dies bedeutet, dass Sie eine Verbindung mit der Instanz von SQL Server hergestellt haben und sqlcmd jetzt bereit sind, Transact-SQL Anweisungen und sqlcmd Befehle zu akzeptieren. Der blinkende Unterstrich nach der 1>sqlcmd Eingabeaufforderung, die die Position kennzeichnet, an der die eingegebenen Anweisungen und Befehle angezeigt werden. Geben Sie USE AdventureWorks2012 nun die EINGABETASTE ein, und drücken GO Sie dann die EINGABETASTE, und drücken Sie dann die EINGABETASTE. Der Inhalt des Eingabeaufforderungsfensters ist:
sqlcmd
USE AdventureWorks2012;
GO
Dies ist die Ergebnismenge.
Changed database context to 'AdventureWorks2012'.
1> _
Drücken der EINGABETASTE, nachdem die Signaleingabe USE AdventureWorks2012 signalisiert wurde sqlcmd , um eine neue Zeile zu beginnen. Drücken Sie die EINGABETASTE, nachdem Sie GO, signalisiert haben sqlcmd , dass die USE AdventureWorks2012 Anweisung an die Instanz von SQL Server gesendet wird.
sqlcmd anschließend wurde eine Meldung zurückgegeben, um anzugeben, dass die USE Anweisung erfolgreich abgeschlossen wurde und eine neue 1> Eingabeaufforderung als Signal angezeigt wurde, um eine neue Anweisung oder einen neuen Befehl einzugeben.
Das folgende Beispiel zeigt, was das Eingabeaufforderungsfenster enthält, wenn Sie eine Anweisung, eine SELECTGO auszuführende SELECTAnweisung und eine EXIT zu beendende sqlcmdAnweisung eingeben:
sqlcmd
USE AdventureWorks2012;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Dies ist die Ergebnismenge.
BusinessEntityID FirstName LastName
----------- -------------------------------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
1> EXIT
C:\>
Die Zeilen nach Zeile 3> GO sind die Ausgabe eines SELECT Befehls. Nachdem Sie die Ausgabe generiert haben, wird sqlcmd die sqlcmd Eingabeaufforderung zurückgesetzt und 1> angezeigt. Nach der Eingabe EXIT in der Zeile 1> zeigt das Eingabeaufforderungsfenster dieselbe Zeile an, die es beim ersten Öffnen angezeigt hat. Dies zeigt an, dass sqlcmd die Sitzung beendet hat. 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 zum Ausführen von Datenbankskriptdateien verwenden sqlcmd . Skriptdateien sind Textdateien, die eine Mischung aus Transact-SQL Anweisungen, sqlcmd Befehlen und Skriptingvariablen enthalten. Weitere Informationen zum Definieren von Skriptvariablen finden Sie unter Verwenden von sqlcmd mit Skriptvariablen.
sqlcmd arbeitet mit den Anweisungen, Befehlen und Skriptingvariablen in einer Skriptdatei ähnlich wie bei Anweisungen und Befehlen, die interaktiv eingegeben werden. Der Hauptunterschied besteht darin, dass sqlcmd die Eingabedatei ohne Pause durchgelesen wird, anstatt darauf zu warten, dass ein Benutzer die Anweisungen, Befehle und Skriptingvariablen eingibt.
Es gibt verschiedene Möglichkeiten, um Datenbankskriptdateien zu erstellen:
Sie können einen Satz von Transact-SQL Anweisungen in SQL Server Management Studio interaktiv erstellen und debuggen und dann den Inhalt des Abfragefensters als Skriptdatei speichern.
Sie können eine Textdatei erstellen, die Transact-SQL Anweisungen enthält, indem Sie einen Text-Editor verwenden, z. B. Editor.
Beispiele
Ein. Ausführen eines Skripts mithilfe von sqlcmd
Öffnen Sie Notepad 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 Folgendes an der Eingabeaufforderung ein, um das Skript auszuführen und die Ausgabe in MyOutput.txt in MyFolder einzufügen:
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
Wenn Sie den Inhalt von MyOutput.txt im 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 administrativen Verbindung
Im folgenden Beispiel wird sqlcmd verwendet, um eine Verbindung mit einem Server herzustellen, der ein Blockierungsproblem mithilfe der dedizierten Administratorverbindung (DAC) aufweist.
C:\>sqlcmd -S ServerName -A
1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;
2> GO
Dies ist die Ergebnismenge.
spid blocked
------ -------
62 64
(1 rows affected)
Verwenden Sie sqlcmd, um den Blockierungsprozess zu beenden.
1> KILL 64;
2> GO
C. Verwenden von sqlcmd zum Ausführen einer gespeicherten Prozedur
Das folgende Beispiel zeigt, wie Sie eine gespeicherte Prozedur mithilfe von sqlcmd ausführen. 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
Das folgende Beispiel zeigt, wie sqlcmd für eine Datenbankwartungsaufgabe verwendet wird. 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 für mehrere 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 vor der Verbindung zur zweiten Instanz.
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
E. Zurückgeben der 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 sqlcmdBefehl wie sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt, kann in einer .bat-Datei zusammen mit VBScript ausgeführt werden. Verwenden Sie in diesem Fall keine interaktiven Optionen.
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' GOC:\goodscript.sql
SELECT 'batch #1' GO SELECT 'batch #2' GOC:\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 :exitC:\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.bataus:
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 in der Azure SQL-Datenbank
Ein sqlcmd kann für eine Verbindung zur SQL-Datenbank ausgeführt werden, um Verschlüsselung und Zertifikatsvertrauen anzugeben. Es stehen zwei 'sqlcmd''-Optionen zur Verfügung:
Der -N Switch wird vom Client verwendet, um eine verschlüsselte Verbindung anzufordern. Diese Option entspricht der ADO.NET-Option
ENCRYPT = true.Der -C Switch wird vom Client verwendet, um ihn implizit für das Vertrauensserverzertifikat zu konfigurieren und es nicht zu überprüfen. Diese Option entspricht der ADO.NET-Option
TRUSTSERVERCERTIFICATE = true.
Der SQL-Datenbankdienst unterstützt nicht alle Optionen, die auf einer SET SQL-Server-Instanz verfügbar sind. Die folgenden Optionen lösen einen Fehler aus, wenn die entsprechende SET -Option auf ON oder OFFfestgelegt wird:
SET ANSI_DEFAULTS
SET-ANSI_NULLS
SET REMOTE_PROC_TRANSACTIONS
SET-ANSI_NULL_DEFAULT
Die folgenden SET-Optionen lösen keine Ausnahmen aus, können aber 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 die SQL Server Native Client Provider-Einstellungen konfiguriert sind: ForceProtocolEncryption = False, Trust Server Certificate = No
Verbindung mit Windows-Anmeldeinformationen herstellen und Kommunikation verschlüsseln:
SQLCMD -E -N
Verbindung mithilfe von Windows-Anmeldeinformationen herstellen und auf 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 Fälle, in denen SQL Server Native Client Provider-Einstellungen enthalten: 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 unabhängig davon, ob Encrypt=No in der Verbindungszeichenfolge angegeben ist.
Siehe auch
sqlcmd Utility
Verwenden von sqlcmd mit Skriptvariablen
Bearbeiten von SQLCMD-Skripts mit dem Abfrage-Editor
Verwalten von Job-Schritten
Erstellen eines CmdExec-Auftragsschritts