Freigeben über


Verwenden des sqlcmd-Hilfsprogramms

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 sqlcmd ein, gefolgt von einer Liste der gewünschten Optionen. Eine vollständige Liste der Optionen, die von sqlcmdsqlcmd Utility unterstützt werden, finden Sie unter sqlcmd Utility.

  • Benutzer übermitteln einen sqlcmd Auftrag 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 sqlcmd eine Verbindung hergestellt wird.

  • Authentifizierungsoptionen (-E, -U und -P), die die Anmeldeinformationen angeben, die sqlcmd zum 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.sqlcmd

  • Die Ausgabeoption (-o), die die Datei angibt, in der sqlcmd die 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 sqlcmd mithilfe 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 sqlcmd nach 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 sqlcmd Beenden nach Abschluss der Ausführung der Abfrage:

    sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt  
    
  • Herstellen einer Verbindung mit einer benannten Instanz mithilfe der SQL Server-Authentifizierung zum interaktiven Ausführen von Transact-SQL Anweisungen mit sqlcmd Aufforderung zur Eingabe eines Kennworts:

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>  
    

    Hinweis

    So zeigen Sie eine Liste der Optionen an, die vom sqlcmd Hilfsprogramm 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'  
    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.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