Verwenden des Hilfsprogramms sqlcmd

 

Gilt für: SQL Server 2016

Das Hilfsprogramm sqlcmd ist ein Befehlszeilen-Hilfsprogramm für die interaktive Ad-hoc-Ausführung von Transact-SQL-Anweisungen und -Skripts und die Automatisierung von Transact-SQL-Skripttasks. Damit Sie sqlcmd interaktiv verwenden oder Skriptdateien aufbauen können, die mithilfe von sqlcmd ausgeführt werden, müssen Sie mit den Grundlagen von Transact-SQL vertraut sein. Das Hilfsprogramm sqlcmd wird in der Regel wie folgt verwendet:

  • Der Benutzer gibt Transact-SQL-Anweisungen ähnlich wie bei der Arbeit an der Eingabeaufforderung interaktiv ein. 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 und im Anschluss eine Liste der gewünschten Optionen ein. Eine vollständige Liste der von sqlcmd unterstützten Optionen finden Sie unter sqlcmd (Hilfsprogramm).

  • Der Benutzer sendet einen sqlcmd-Auftrag entweder durch die Angabe einer einzelnen auszuführenden Transact-SQL-Anweisung, oder indem er das Hilfsprogramm an eine Textdatei verweist, in der die auszuführenden Transact-SQL-Anweisungen enthalten sind. Die Ausgabe wird normalerweise in einer Textdatei gespeichert, sie kann jedoch auch an der Eingabeaufforderung angezeigt werden.

  • SQLCMD-Modus im SQL Server Management Studio-Abfrage-Editor.

  • SQL Server Management Objects (SMO)

  • CmdExec-Aufträge des SQL Server-Agents.

Die folgenden Optionen werden am häufigsten verwendet:

  • Die Serveroption (-S), mit der eine Instanz von Microsoft SQL Serveridentifiziert wird, mit der sqlcmd eine Verbindung herstellt.

  • Authentifizierungsoptionen (-E, -U, und -P), mit denen die Anmeldeinformationen angegeben werden, die sqlcmd verwendet, um eine Verbindung mit der Instanz von SQL Server herzustellen.

    System_CAPS_ICON_note.jpg Hinweis


    Die Option -E ist die Standardeinstellung und muss nicht angegeben werden.

  • Eingabeoptionen (-Q, -q und -i), mit denen der Eingabespeicherort für sqlcmd identifiziert wird.

  • Die Ausgabeoption (-o), mit der die Datei angegeben wird, in die sqlcmd die Ausgabe ausgeben soll.

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>  
    
    
    System_CAPS_ICON_note.jpg Hinweis


    Im vorherigen Beispiel wurde -E nicht angegeben, da dies die Standardeinstellung ist und von sqlcmd eine Verbindung mit der Standardinstanz mithilfe der Windows-Authentifizierung hergestellt wird.

  • 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 einer benannten Instanz mithilfe der SQL Server-Authentifizierung, um Transact-SQL-Anweisungen interaktiv auszuführen, wobei von sqlcmd eine Aufforderung zur Kennworteingabe erfolgt:

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>  
    
    
    System_CAPS_ICON_note.jpg Hinweis


    Eine vollständige Liste der vom Hilfsprogramm sqlcmd unterstützten Optionen erhalten Sie, indem Sie folgenden Befehl ausführen: sqlcmd -?.

Sie können das Hilfsprogramm sqlcmd interaktiv verwenden, um Transact-SQL-Anweisungen in einem Eingabeaufforderungsfenster auszuführen. Führen Sie das Hilfsprogramm zum Angeben von Eingabedateien und zum Abfragen ohne die Optionen -Q, -q, -Z, oder -i aus, um Transact-SQL-Anweisungen mithilfe von sqlcmd interaktiv auszuführen. Beispiel:

sqlcmd -S <ComputerName>\<InstanceName>

Wenn der Befehl ohne Eingabedateien oder Abfragen ausgeführt wird, wird von sqlcmd eine Verbindung mit der angegebenen Instanz von SQL Server hergestellt und anschließend eine neue Zeile mit einer 1> gefolgt von einem blinkenden Unterstrich angezeigt. Dies wird als sqlcmd-Aufforderung bezeichnet. Die 1 bedeutet, dass es sich um die erste Zeile einer Transact-SQL-Anweisung handelt, und die sqlcmd-Aufforderung ist die Stelle, an der die Transact-SQL-Anweisung startet, wenn Sie sie eingeben.

An der sqlcmd-Eingabeaufforderung können Sie sowohl Transact-SQL-Anweisungen als auch sqlcmd-Befehle (z.B. GO und EXIT) eingeben. Die einzelnen Transact-SQL-Anweisungen werden in einen Puffer geladen, den sogenannten Anweisungscache. Diese Anweisungen werden an SQL Server gesendet, nachdem Sie den Befehl GO eingegeben und die EINGABETASTE gedrückt haben. Wenn Sie sqlcmd beenden möchten, geben Sie am Anfang einer neuen Zeile EXIT oder QUIT ein.

Den Anweisungscache können Sie löschen, indem Sie :RESET eingeben. Die Eingabe von ^C bewirkt, dass sqlcmd beendet wird. ^C kann auch dazu verwendet werden, die Ausführung des Anweisungscaches zu beenden, nachdem der Befehl GO ausgegeben wurde.

Transact-SQL Anweisungen, die in einer interaktiven Sitzung eingegeben wurden, können bearbeitet werden, indem Sie an der sqlcmd-Eingabeaufforderung :ED 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 GOein, um die überarbeitete Transact-SQL-Anweisung auszuführen.

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

Im Folgenden finden Sie das Resultset.

Length: 5" 7'

sqlcmd unterstützt Skripts mit Zeichenfolgen, die mehrere Zeilen umfassen. 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

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 sqlcmd ein, um eine Verbindung mit der Standardinstanz von SQL Server auf dem lokalen Computer herzustellen. In diesem Fall lautet der Inhalt des Eingabeaufforderungsfensters folgendermaßen:

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 USE AdventureWorks2012 ein, drücken Sie die EINGABETASTE, geben Sie anschließend GO ein, und drücken Sie erneut die EINGABETASTE. Im Eingabeaufforderungsfensters wird der folgende Text angezeigt:

sqlcmd

USE AdventureWorks2012;

GO

Im Folgenden finden Sie 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 Server zu 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

Im Folgenden finden Sie 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.

Sie können sqlcmd zum Ausführen von Datenbankskriptdateien verwenden. Bei Skriptdateien handelt es sich um Textdateien, die eine Kombination 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 sqlcmd die Eingabedatei ohne Pause durchliest, 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.

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

Im Folgenden finden Sie 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, z.B. 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 Windows Azure SQL-Datenbank

Ein sqlcmdkann bei einer Verbindung mit SQL-Datenbank-Daten ausgeführt werden, um die Verschlüsselung und Zertifikatsvertrauenswürdigkeit anzugeben. Zwei sqlcmd``-Optionen sind verfügbar:

  • Der Schalter "-N" wird vom Client verwendet, um eine verschlüsselte Verbindung anzufordern. Diese Option entspricht der ADO.NET-Option ENCRYPT = true.

  • Der –C-Schalter 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.

sqlcmd (Hilfsprogramm)
Verwenden von sqlcmd mit Skriptvariablen
Bearbeiten von SQLCMD-Skripts mit dem Abfrage-Editor
Verwalten von Auftragsschritten
Erstellen eines CmdExec-Auftragsschritts

Community-Beiträge

HINZUFÜGEN
Anzeigen: