Auf Englisch lesen

Freigeben über


sqlcmd-Dienstprogramm

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Datenbank in Microsoft Fabric

Mit dem Hilfsprogramm sqlcmd können Sie Transact-SQL-Anweisungen, Systemprozeduren und Skriptdateien in verschiedenen Modi eingeben:

  • An einer Eingabeaufforderung.
  • Im Abfrage-Editor im SQLCMD-Modus.
  • In einer Windows-Skriptdatei.
  • In einem Auftragsschritt eines SQL Server-Agent-Auftrags für ein Betriebssystem (cmd.exe)

Hinweis

Während Microsoft Entra-ID der neue Name für Azure Active Directory (Azure AD) ist, bleibt Azure AD in einigen fest kodierten Elementen wie Benutzeroberfläche-Feldern, Verbindungsanbietern, Fehlercodes und Cmdlets erhalten, um Störungen in bestehenden Umgebungen zu vermeiden. In diesem Artikel sind die beiden Namen austauschbar.

Ermitteln der installierten Version

Es gibt zwei Versionen von sqlcmd:

  • Das go-mssqldb-basierte sqlcmd, manchmal als go-sqlcmd formatiert. Diese Version ist ein eigenständiges Tool, das Sie unabhängig von SQL Server herunterladen können.

  • Das ODBC-basierte sqlcmd, verfügbar mit SQL Server oder Microsoft Command Line Utilities und Teil des mssql-tools-Pakets unter Linux.

Um die installierte Version zu ermitteln, führen Sie die folgende Anweisung in der Befehlszeile aus:

sqlcmd "-?"
sqlcmd "-?"
sqlcmd -?

Wenn Sie die neue Version von sqlcmd (Go) verwenden, ähnelt die Ausgabe dem folgenden Beispiel:

Version: 1.8.2

Überprüfen der Version

Sie können sqlcmd --version verwenden, um zu bestimmen, welche Version installiert ist. Sie sollten mindestens Version 1.0.0 installiert haben.

Wichtig

Durch die Installation von sqlcmd- (Go) über einen Paket-Manager wird sqlcmd- (ODBC) durch sqlcmd- (Go) im Umgebungspfad ersetzt. Sie müssen alle aktuellen Befehlszeilensitzungen schließen und erneut öffnen, damit diese Änderung wirksam wird. sqlcmd (ODBC) wird nicht entfernt und kann weiterhin verwendet werden, indem der vollständige Pfad zur ausführbaren Datei angegeben wird. Sie können ihre PATH Variable auch aktualisieren, um anzugeben, welche Vorrang hat. Öffnen Sie dazu in Windows 11 Systemeinstellungen, und wechseln Sie zu Informationen > Erweiterte Systemeinstellungen. Wenn Systemeigenschaften geöffnet wird, klicken Sie auf die Schaltfläche Umgebungsvariablen. Wählen Sie in der unteren Hälfte unter Systemvariablen die Option Pfad und dann Bearbeiten aus. Wenn der Speicherort, an dem sqlcmd (Go) gespeichert ist (standardmäßig C:\Program Files\sqlcmd), vor C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn aufgeführt wird, wird sqlcmd (Go) verwendet. Sie können die Reihenfolge umkehren, um sqlcmd (ODBC) erneut als Standardwert festzulegen.

Herunterladen und Installieren von sqlcmd

sqlcmd (Go) kann plattformübergreifend auf Microsoft Windows, macOS und Linux installiert werden. Versionen neuer als 1.6 sind möglicherweise nicht in allen Paket-Managern verfügbar. Es gibt noch kein geschätztes Datum für ihre Verfügbarkeit.

apt (Debian/Ubuntu)

  1. Importieren Sie die GPG-Schlüssel des öffentlichen Repositorys.

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    
  2. Fügen Sie das Microsoft-Repository hinzu (das Segment ubuntu/20.04 kann debian/11, ubuntu/20.04 oder ubuntu/22.04 sein).

    add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/prod.list)"
    
  3. Installieren Sie sqlcmd (Go) mit apt.

    apt-get update
    apt-get install sqlcmd
    

yum (Fedora)

  1. Importieren Sie den Microsoft-Repositoryschlüssel.

    rpm --import https://packages.microsoft.com/keys/microsoft.asc
    
  2. Laden Sie die Repositorykonfigurationsdatei herunter (das Segment fedora/32 kann opensuse/42.3, rhel/8 oder sles/15 sein). Wenn die Version Ihres Betriebssystems nicht direkt einer dieser Optionen entspricht, können Sie möglicherweise eine Repositorykonfigurationsdatei aus einer Version verwenden.

    curl -o /etc/yum.repos.d/packages-microsoft-com-prod.repo https://packages.microsoft.com/config/fedora/40/prod.repo
    
  3. Installieren Sie sqlcmd (Go) mit yum.

    yum install sqlcmd
    

Direkter Download

  1. Laden Sie das entsprechende -linux-x64.tar.bz2- bzw. -linux-arm.tar.bz2-Objekt aus dem neuesten Release von sqlcmd (Go) aus dem GitHub-Coderepository herunter.

  2. Extrahieren Sie die Datei sqlcmd aus dem heruntergeladenen ZIP-Ordner.

Vorinstalliert

Azure Cloud Shell

Sie können das sqlcmd-Hilfsprogramm über die Azure Cloud Shell testen, da diese standardmäßig vorinstalliert ist:

Azure Data Studio

Um SQLCMD-Anweisungen in Azure Data Studio auszuführen, wählen Sie in der Symbolleiste des Editors die Option Enable SQLCMD.

SQL Server Management Studio (SSMS)

Um SQLCMD-Anweisungen in SQL Server Management Studio (SSMS) auszuführen, wählen Sie den SQLCMD-Modus aus der Dropdown-Liste des Abfragemenüs in der oberen Navigation.

SSMS verwendet das Microsoft .NET Framework SqlClient für die Ausführung im regulären und SQLCMD-Modus im Query Editor. Beim Ausführen von sqlcmd über die Befehlszeile verwendet sqlcmd den ODBC-Treiber. Da unterschiedliche Standardoptionen angewendet werden können, werden möglicherweise unterschiedliche Verhaltensweisen angezeigt, wenn Sie dieselbe Abfrage in SSMS im SQLCMD-Modus und im sqlcmd-Hilfsprogramm ausführen.

Syntax

Usage:
  sqlcmd [flags]
  sqlcmd [command]

Examples:
# Install/Create, Query, Uninstall SQL Server
  sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
  sqlcmd open ads
  sqlcmd query "SELECT @@version"
  sqlcmd delete
# View configuration information and connection strings
  sqlcmd config view
  sqlcmd config cs

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
  create      Install/Create SQL Server, Azure SQL, and Tools
  delete      Uninstall/Delete the current context
  help        Help about any command
  open        Open tools (e.g ADS) for current context
  query       Run a query against the current context
  start       Start current context
  stop        Stop current context

Flags:
  -?, --?                  help for backwards compatibility flags (-S, -U, -E etc.)
  -h, --help               help for sqlcmd
      --sqlconfig string   configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
      --verbosity int      log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
      --version            print version of sqlcmd

Use "sqlcmd [command] --help" for more information about a command.

Ausführlichere Informationen zur Syntax und Verwendung von sqlcmd finden Sie unter ODBC sqlcmd syntax.

Breaking Changes von sqlcmd (ODBC)

Mehrere Schalter und Verhaltensweisen wurden im Hilfsprogramm sqlcmd (Go) geändert. Die aktuellste Liste der fehlenden Flags für die Abwärtskompatibilität finden Sie in der GitHub-Diskussion zum Priorisieren der Implementierung von Back-Compat-Flags.

  • In früheren Versionen von sqlcmd (Go) wurde der -P-Switch vorübergehend entfernt, und Kennwörter für die SQL Server-Authentifizierung konnten nur über diese Mechanismen bereitgestellt werden:

    • Die SQLCMDPASSWORD-Umgebungsvariable
    • Befehl :CONNECT
    • Der Benutzer konnte das Kennwort an der entsprechenden Eingabeaufforderung eingeben, um eine Verbindung herzustellen
  • -r erfordert ein 0- oder 1-Argument

  • Der Schalter -R wurde entfernt.

  • Der Schalter -I wurde entfernt. Um das Verhalten von Bezeichnern in Anführungszeichen zu deaktivieren, fügen Sie SET QUOTED IDENTIFIER OFF in Ihre Skripts ein.

  • -N übernimmt nun einen Zeichenfolgenwert (true, false oder disable), um die ausgewählte Verschlüsselung anzugeben. (default entspricht dem Auslassen des Parameters.)

    • Wenn -N und -C nicht angegeben werden, verhandelt sqlcmd die Authentifizierung mit dem Server, ohne das Serverzertifikat zu überprüfen.
    • Wenn -N angegeben ist, -C jedoch nicht, schreibt sqlcmd eine Überprüfung des Serverzertifikats vor. Ein false-Wert für die Verschlüsselung kann weiterhin zur Verschlüsselung des Anmeldepakets führen.
    • Wenn -N und -C angegebenen werden, verwendet sqlcmd deren Werte für die Verschlüsselungsverhandlung.
    • Weitere Informationen zur Aushandlung der Client-/Serververschlüsselung finden Sie unter MS-TDS PRELOGIN.
  • -u: Die generierte Unicode-Ausgabedatei enthält die UTF-16 Little-Endian-Bytereihenfolge-Marke (BOM).

  • Einige Verhalten, die beibehalten wurden, um die Kompatibilität mit OSQL aufrechtzuerhalten, haben sich möglicherweise geändert, z. B. die Ausrichtung von Spaltenüberschriften für einige Datentypen.

  • Alle Befehle müssen in eine Zeile passen, auch EXIT. Im interaktiven Modus wird nicht auf offene Klammern oder Anführungszeichen bei Befehlen geachtet, und es erfolgt keine Aufforderung zur Eingabe nachfolgender Zeilen. Dieses Verhalten unterscheidet sich von der ODBC-Version, bei der sich die von EXIT(query) ausgeführte Abfrage über mehrere Zeilen erstrecken kann.

Verbindungen von sqlcmd (Go) sind auf TCP-Verbindungen beschränkt. Named Pipes werden im go-mssqldb-Treiber derzeit nicht unterstützt.

Erweiterungen

  • :Connect verfügt jetzt über einen optionalen -G-Parameter zum Auswählen einer Authentifizierungsmethoden für Azure SQL-Datenbank: SqlAuthentication, ActiveDirectoryDefault, ActiveDirectoryIntegrated, ActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity oder ActiveDirectoryPassword. Weitere Informationen finden Sie unter Microsoft Entra-Authentifizierung. Wird -G nicht angegeben, wird abhängig vom Vorhandensein eines -U-Benutzernamenparameters entweder die integrierte Sicherheit oder die SQL Server-Authentifizierung verwendet.

  • Der neue --driver-logging-level-Befehlszeilenparameter ermöglicht Ihnen, Traces des go-mssqldb-Treibers zu sehen. Verwenden Sie 64, um alle Ablaufverfolgungen anzuzeigen.

  • sqlcmd kann jetzt Ergebnisse im vertikalen Format ausgeben. Verwenden Sie dazu die neue -F vertical-Befehlszeilenoption. Die Steuerung ist auch durch die Skriptvariable SQLCMDFORMAT möglich.

Befehlszeilenoptionen

In der folgenden Tabelle sind die Befehlszeilenoptionen aufgeführt, die in sqlcmd verfügbar sind und welche Betriebssysteme unterstützt werden.

-A

Gilt für: Nur Windows. Linux und macOS werden nicht unterstützt.

Meldet sich bei SQL Server über eine dedizierte Administratorverbindung (DAC) an. Diese Verbindungsart wird verwendet, um Serverprobleme zu behandeln. Diese Verbindung funktioniert nur bei Servercomputern, die DAC unterstützen. Wenn DAC nicht verfügbar ist, generiert sqlcmd eine Fehlermeldung und wird dann beendet. Weitere Informationen zu DAC finden Sie unter Diagnoseverbindung für Datenbankadministratoren. Die -A-Option wird mit der -G-Option nicht unterstützt. Wenn Sie unter Verwendung von -A eine Verbindung mit Azure SQL-Datenbank herstellen, müssen Sie Administrator*in für den logischen SQL-Server sein. DAC ist für einen Microsoft Entra-Administrator nicht verfügbar.

Hinweis

Informationen zum Erstellen einer dedizierten Administratorverbindung (DAC) unter macOS oder Linux finden Sie unter Programmierrichtlinien.

-C

Diese Option wird vom Client verwendet, um ihn so zu konfigurieren, dass er dem Serverzertifikat ohne Überprüfung implizit vertraut. Diese Option entspricht der ADO.NET-Option TRUSTSERVERCERTIFICATE = true.

Für das Hilfsprogramm sqlcmd (Go) gelten auch die folgenden Bedingungen:

  • Wenn -N und -C nicht angegeben werden, verhandelt sqlcmd die Authentifizierung mit dem Server, ohne das Serverzertifikat zu überprüfen.
  • Wenn -N angegeben ist, -C jedoch nicht, schreibt sqlcmd eine Überprüfung des Serverzertifikats vor. Ein false-Wert für die Verschlüsselung kann weiterhin zur Verschlüsselung des Anmeldepakets führen.
  • Wenn -N und -C angegebenen werden, verwendet sqlcmd deren Werte für die Verschlüsselungsverhandlung.

-d db_name

Gibt eine USE <db_name>-Anweisung aus, wenn Sie sqlcmd starten. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDDBNAME festgelegt. Dieser Parameter gibt die Ausgangsdatenbank an. Der Standardwert ist die Standarddatenbank-Eigenschaft des Logins. Wenn die Datenbank nicht vorhanden ist, wird eine Fehlermeldung generiert, und sqlcmd wird beendet.

-D

Diese Option interpretiert den an -S übergebenen Servernamen als DSN anstatt als Hostnamen. Weitere Informationen finden Sie unter DSN-Unterstützung in sqlcmd und bcp.

Hinweis

Die -D-Option ist nur für Linux- und macOS-Clients verfügbar. Auf Windows-Clients bezieht es sich auf eine veraltete Option, die entfernt wurde und ignoriert wird.

-l login_timeout

Gibt an, wie viele Sekunden bei der Herstellung einer Verbindung mit einem Server verstreichen dürfen, bevor für eine sqlcmd-Anmeldung beim ODBC-Treiber ein Timeout eintritt. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDLOGINTIMEOUT festgelegt. Der Standardwert für das Timeout einer sqlcmd-Anmeldung beträgt acht Sekunden. Wenn Sie die -G-Option verwenden, um eine Verbindung zu Azure SQL-Datenbank oder Azure Synapse Analytics herzustellen und sich mit Microsoft Entra ID zu authentifizieren, wird ein Timeoutwert von mindestens 30 Sekunden empfohlen. Der Anmelde-Timeout muss eine Zahl zwischen 0 und 65534 sein. Wenn der angegebene Wert kein numerischer Wert ist oder außerhalb dieses Bereichs liegt, generiert sqlcmd eine Fehlermeldung. Mit dem Wert 0 wird eine unbegrenzte Wartezeit festgelegt.

-E

Verwendet eine vertrauenswürdige Verbindung anstelle eines Benutzernamens und eines Kennworts für die Anmeldung bei SQL Server. Standardmäßig verwendet sqlcmd die Option für vertrauenswürdige Verbindung, wenn -E nicht angegeben ist.

Die Option -E ignoriert mögliche Umgebungsvariableneinstellungen für Benutzernamen und Kennwörter (z. B. SQLCMDPASSWORD). Wird die Option -E zusammen mit der Option -U oder der Option -P verwendet, wird eine Fehlermeldung generiert.

Hinweis

Weitere Informationen zum Erstellen vertrauenswürdiger Verbindungen, die die integrierte Authentifizierung von einem Linux- oder macOS-Client verwenden, finden Sie unter Verwenden der integrierten Authentifizierung.

-g

Hiermit wird die Einstellung „Spaltenverschlüsselung“ auf Enabled festgelegt. Weitere Informationen hierzu finden Sie unter Always Encrypted. Es werden nur Hauptschlüssel unterstützt, die im Windows-Zertifikatspeicher gespeichert sind. Für die -g-Option ist mindestens die sqlcmd-Version 13.1 erforderlich. Um die Version zu bestimmen, führen Sie sqlcmd -?aus.

-G

Diese Option wird vom Client beim Herstellen einer Verbindung mit azure SQL-Datenbank oder Azure Synapse Analytics verwendet, um anzugeben, dass der Benutzer mit der Microsoft Entra-Authentifizierung authentifiziert wird. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDUSEAAD = true festgelegt. Für die -G-Option ist mindestens die sqlcmd-Version 13.1 erforderlich. Um die Version zu bestimmen, führen Sie sqlcmd -?aus. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit SQL-Datenbank oder Azure Synapse Analytics unter Verwendung der Microsoft Entra-Authentifizierung. Die -A-Option wird mit der -G-Option nicht unterstützt.

Die Option -G gilt nur für Azure SQL-Datenbank und Azure Synapse Analytics.

Die interaktive Microsoft Entra-Authentifizierung wird unter Linux und macOS derzeit nicht unterstützt. Die integrierte Microsoft Entra-Authentifizierung erfordert Microsoft ODBC-Treiber 17 für SQL Server , Version 17.6.1 oder höher und eine ordnungsgemäß konfigurierte Kerberos-Umgebung.

Weitere Informationen zur Microsoft Entra-Authentifizierung finden Sie unter Microsoft Entra-Authentifizierung in sqlcmd.

-H workstation_name

Der Name einer Arbeitsstation. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDWORKSTATION festgelegt. Der Name der Arbeitsstation wird in der hostname-Spalte der sys.sysprocesses-Katalogsicht aufgeführt, und der Name kann mithilfe der gespeicherten Prozedur sp_who zurückgegeben werden. Wenn diese Option nicht angegeben ist, wird standardmäßig der Name des aktuellen Computers angenommen. Mithilfe dieses Namens können verschiedene sqlcmd -Sitzungen identifiziert werden.

-j

Gibt unformatierte Fehlermeldungen auf dem Bildschirm aus

-K Anwendungszweck

Deklariert den Arbeitsauslastungstyp der Anwendung beim Herstellen einer Verbindung mit einem Server. Der einzige derzeit unterstützte Wert ist ReadOnly. Wenn -K nicht angegeben wird, unterstützt sqlcmd keine Konnektivität mit einem sekundären Replikat in einer Verfügbarkeitsgruppe. Weitere Informationen finden Sie unter Aktive sekundäre Replikate: Lesbare sekundäre Replikate (Always On-Verfügbarkeitsgruppen).

Hinweis

-K wird in SUSE Linux Enterprise Server (SLES) nicht unterstützt. Sie können jedoch das ApplicationIntent=ReadOnly Schlüsselwort in einer DSN-Datei angeben, die an sqlcmd übergeben wird. Weitere Informationen finden Sie unter DSN-Support in sqlcmd und bcp weiter unten in diesem Artikel.

Weitere Informationen finden Sie unter Hoher Verfügbarkeit und Notfallwiederherstellung unter Linux und macOS.

-M multisubnet_failover

Geben Sie immer -M an, wenn Sie eine Verbindung mit dem Verfügbarkeitsgruppenlistener einer SQL Server-Verfügbarkeitsgruppe oder einer SQL Server-Failoverclusterinstanz herstellen. -M gewährleistet eine schnellere Erkennung und Verbindung mit dem (gerade) aktiven Server. Wenn -M nicht angegeben ist, ist -M deaktiviert. Weitere Informationen finden Sie unter Listener, Clientkonnektivität, Anwendungsfailover, Erstellung und Konfiguration von Verfügbarkeitsgruppen (SQL Server), Failoverclustering und Always On-Verfügbarkeitsgruppen (SQL Server) und Aktive Sekundäre: Lesbare sekundäre Replikate (Always On-Verfügbarkeitsgruppen).

Hinweis

-M wird in SUSE Linux Enterprise Server (SLES) nicht unterstützt. Sie können jedoch das Schlüsselwort MultiSubnetFailover=Yes in einer DSN-Datei angeben, die an sqlcmd übergeben wird. Weitere Informationen finden Sie unter DSN-Support in sqlcmd und bcp weiter unten in diesem Artikel.

Weitere Informationen finden Sie unter Hoher Verfügbarkeit und Notfallwiederherstellung unter Linux und macOS.

-N

Diese Option wird vom Client verwendet, um eine verschlüsselte Verbindung anzufordern.

Für das Hilfsprogramm sqlcmd (Go) nimmt -N jetzt einen String-Wert an, der einer der Werte true, false, oder disable sein kann, um die Wahl der Verschlüsselung anzugeben. (default entspricht dem Auslassen des Parameters):

  • Wenn -N und -C nicht angegeben werden, verhandelt sqlcmd die Authentifizierung mit dem Server, ohne das Serverzertifikat zu überprüfen.
  • Wenn -N angegeben ist, -C jedoch nicht, schreibt sqlcmd eine Überprüfung des Serverzertifikats vor. Ein false-Wert für die Verschlüsselung kann weiterhin zur Verschlüsselung des Anmeldepakets führen.
  • Wenn -N und -C angegebenen werden, verwendet sqlcmd deren Werte für die Verschlüsselungsverhandlung.

Hinweis

Unter Linux und macOS wurde in sqlcmd 18.0 [s|m|o] hinzugefügt.

-P password

Dies ist ein von den Benutzer*innen angegebenes Kennwort. Bei Kennwörtern wird nach Groß- und Kleinschreibung unterschieden. Wenn die -U Option verwendet wird, wird die -P Option nicht verwendet, und die SQLCMDPASSWORD Umgebungsvariable wird nicht festgelegt, sqlcmd fordert den Benutzer zur Eingabe eines Kennworts auf. Die Verwendung eines NULL-Kennworts (leer) wird nicht empfohlen, aber Sie können es angeben, indem Sie ein Paar zusammenhängender doppelter Anführungszeichen für den Parameterwert verwenden ("").

Wichtig

Die Verwendung von -P sollte als unsicher betrachtet werden. Vermeiden Sie es, das Kennwort in die Befehlszeile einzugeben. Alternativ können Sie die Umgebungsvariable SQLCMDPASSWORD verwenden oder das Kennwort interaktiv eingeben, indem Sie die -P-Option weglassen.

Es wird empfohlen, ein sicheres Kennwort zu verwenden.

Die Aufforderung zur Eingabe des Kennworts wird folgendermaßen an der Konsole ausgegeben: Password:

Die Benutzereingabe bleibt verborgen. d. h. es erfolgt keine Anzeige, und der Cursor bleibt an der Anfangsposition.

Über die Umgebungsvariable SQLCMDPASSWORD können Sie ein Standardkennwort für die aktuelle Sitzung festlegen. Aus diesem Grund ist die Hartcodierung von Kennwörtern in Batchdateien nicht notwendig. Im folgenden Beispiel wird zuerst die -Variable an der Eingabeaufforderung festgelegt und dann auf das Hilfsprogramm SQLCMDPASSWORDsqlcmd zugegriffen.

Geben Sie an der Eingabeaufforderung Folgendes ein. Ersetzen Sie <password> durch ein gültiges Kennwort.

SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd

Wenn die Kombination aus Benutzername und Kennwort falsch ist, wird eine Fehlermeldung generiert.

Hinweis

Die Umgebungsvariable OSQLPASSWORD wird aus Gründen der Abwärtskompatibilität beibehalten. Die Umgebungsvariable SQLCMDPASSWORD ist bezüglich der Umgebungsvariable OSQLPASSWORD vorrangig. Dies bedeutet, dass sqlcmd und osql störungsfrei parallel verwendet werden können. Alte Skripts funktionieren weiterhin.

Wird die -P-Option zusammen mit der -E-Option verwendet, wird eine Fehlermeldung generiert.

Werden nach der -P-Option mehrere Argumente angegeben, wird eine Fehlermeldung generiert und das Programm beendet.

Ein Kennwort mit Sonderzeichen kann eine Fehlermeldung generieren. Sie sollten bei Verwendung von -P Sonderzeichen mit Escapezeichen versehen oder stattdessen die Umgebungsvariable SQLCMDPASSWORD verwenden.

Unter Linux und macOS gibt -P bei Verwendung der -G-Option ohne -U eine Datei an, die ein Zugriffstoken (v17.8+) enthält. Die Tokendatei sollte im UTF-16LE-Format (ohne BOM) vorliegen.

Zugriffstoken können über verschiedene Methoden abgerufen werden. Sie müssen sicherstellen, dass das Zugriffstoken byteweise korrekt ist, da es gesendet wird as-is. Nachfolgend sehen Sie einen Beispielbefehl, der ein Zugriffstoken abruft. Der Befehl verwendet die Azure CLI und Linux-Befehle und speichert sie in einer Datei im richtigen Format. Wenn die Standardcodierung Ihres Systems oder Terminals nicht ASCII oder UTF-8 ist, müssen Sie die iconv Optionen möglicherweise anpassen. Die resultierende Datei muss zuverlässig geschützt und gelöscht werden, sobald sie nicht mehr benötigt wird.

az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile

-S [protocol:]server[\instance_name][,port]

Gibt die SQL Server-Instanz an, mit der eine Verbindung hergestellt werden soll. Dadurch wird die sqlcmd-Skriptvariable SQLCMDSERVER festgelegt.

Geben Sie server_name an, um eine Verbindung mit der Standardinstanz von SQL Server auf diesem Servercomputer herzustellen. Geben Sie server_name[\instance_name] an, um eine Verbindung mit der benannten Instanz von SQL Server auf diesem Servercomputer herzustellen. Wenn kein Servercomputer angegeben wird, stellt sqlcmd eine Verbindung mit der Standardinstanz von SQL Server auf dem lokalen Computer her. Diese Option ist erforderlich, wenn sqlcmd von einem Remotecomputer im Netzwerk ausgeführt wird.

Protokoll kann Folgendes sein: tcp (TCP/IP), lpc (Shared Memory) oder np (Named Pipes).

Wenn Sie server_name[\instance_name] beim Starten von sqlcmd nicht angeben, sucht SQL Server nach der Umgebungsvariable SQLCMDSERVER und verwendet diese.

Hinweis

Die Umgebungsvariable OSQLSERVER wird aus Gründen der Abwärtskompatibilität beibehalten. Die Umgebungsvariable SQLCMDSERVER ist bezüglich der Umgebungsvariable OSQLSERVER vorrangig. Dies bedeutet, dass sqlcmd und osql störungsfrei parallel verwendet werden können. Alte Skripts funktionieren weiterhin.

Der ODBC-Treiber unter Linux und macOS erfordert -S. Der einzige gültige Protokollwert ist tcp.

-U login_id

Dies ist der Anmeldename oder der für die eigenständige Datenbank verwendete Benutzername. Für Benutzer*innen einer eingeschlossenen Datenbank müssen Sie die Option für den Datenbanknamen (-d) angeben.

Hinweis

Die Umgebungsvariable OSQLUSER wird aus Gründen der Abwärtskompatibilität beibehalten. Die Umgebungsvariable SQLCMDUSER ist bezüglich der Umgebungsvariable OSQLUSER vorrangig. Dies bedeutet, dass sqlcmd und osql störungsfrei parallel verwendet werden können. Alte Skripts funktionieren weiterhin.

Wenn Sie weder die -U-Option noch die -P-Option angegeben, versucht sqlcmd, die Verbindung mithilfe des Windows-Authentifizierungsmodus herzustellen. Die Authentifizierung basiert auf dem Windows-Konto des Benutzers, der sqlcmdausführt.

Wird die Option -U zusammen mit der Option -E verwendet (weiter unten in diesem Artikel beschrieben), wird eine Fehlermeldung generiert. Werden nach der -U-Option mehrere Argumente angegeben, wird eine Fehlermeldung generiert und das Programm beendet.

-z new_password

Ändern Sie das Kennwort. Ersetzen Sie <oldpassword> es durch das alte Kennwort und <newpassword> durch das neue Kennwort.

sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>

-Z new_password

Ändern Sie das Kennwort und melden Sie sich ab. Ersetzen Sie <oldpassword> es durch das alte Kennwort und <newpassword> durch das neue Kennwort.

sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>

Eingabe- bzw. Ausgabeoptionen

-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]

Gibt die Eingabe- und Ausgabe-Code-Seiten an. Die Codepagenummer ist ein numerischer Wert, der eine installierte Windows-Codepage angibt.

Codeseitenkonvertierungsregeln:

  • Wenn keine Codepages angegeben sind, verwendet sqlcmd die aktuelle Codepage sowohl für Eingabe- als auch für Ausgabedateien, außer wenn es sich bei der Eingabedatei um eine Unicode-Datei handelt, da in diesem Fall keine Konvertierung erforderlich ist.

  • sqlcmd erkennt Unicode-Eingabedateien des Formats Big-Endian bzw. Little-Endian automatisch. Wenn die -u-Option angegeben wurde, handelt es sich bei der Ausgabe stets um Unicode-Dateien im Little-Endian-Format.

  • Wenn keine Ausgabedatei angegeben wurde, handelt es sich bei der Ausgabecodepage um die Codepage der Konsole. Auf diese Weise kann die Ausgabe richtig auf der Konsole angezeigt werden.

  • Wenn mehrere Eingabedateien angegeben wurden, wird davon ausgegangen, dass sie dieselbe Codepage verwenden. Unicode- und Nicht-Unicode-Eingabedateien können gemischt verwendet werden.

Geben Sie an der Eingabeaufforderung chcp ein, um die Codepage von cmd.exe zu überprüfen.

Hinweis

Unter Linux ist die Codepagenummer ein numerischer Wert, der eine installierte Linux-Codeseite angibt (verfügbar seit 17.5.1.1).

-i input_file[,input_file2...]

Hiermit wird die Datei identifiziert, die einen Batch mit Transact-SQL-Anweisungen oder gespeicherten Prozeduren enthält. Sie können mehrere Dateien angeben, die der Reihe nach gelesen und verarbeitet werden. Verwenden Sie keine Leerzeichen zwischen Dateinamen. sqlcmd prüft zunächst, ob alle angegebenen Dateien vorhanden sind. Wenn eine oder mehrere Dateien nicht vorhanden sind, wird sqlcmd beendet. Die Optionen -i und -Q/-q schließen sich gegenseitig aus.

Hinweis

Wenn Sie die option -i gefolgt von einem oder mehreren zusätzlichen Parametern verwenden, müssen Sie ein Leerzeichen zwischen dem Parameter und dem Wert verwenden. Dies ist ein bekanntes Problem in sqlcmd (Go).

Beispiele für Pfade:

-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"

Dateipfade, die Leerzeichen enthalten, müssen in Anführungszeichen eingeschlossen werden.

Diese Option kann mehrmals verwendet werden:

sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>

-o output_file

Identifiziert die Datei, die die Ausgabe von sqlcmderhält.

Ist -u angegeben, wird die Ausgabedatei im Unicode-Format gespeichert. Wenn der Dateiname ungültig ist, wird eine Fehlermeldung generiert, und sqlcmd wird beendet. sqlcmd unterstützt keine parallelen Schreibvorgänge mehrerer sqlcmd-Prozesse in dieselbe Datei. In diesem Fall ist die Dateiausgabe beschädigt oder fehlerhaft. Die -f-Option ist auch für Dateiformate relevant. Falls sie noch nicht vorhanden ist, wird die Datei erstellt. Eine Datei mit demselben Namen aus einer früheren sqlcmd-Sitzung wird überschrieben. Bei der hier angegebenen Datei handelt es sich nicht um die stdout-Datei. Wenn eine stdout-Datei angegeben ist, wird diese Datei nicht verwendet.

Beispiele für Pfade:

-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"

Dateipfade, die Leerzeichen enthalten, müssen in Anführungszeichen eingeschlossen werden.

-r[0 | 1]

Leitet die Ausgabe der Fehlermeldung auf den Bildschirm um (stderr). Wenn Sie keinen Parameter angeben bzw. 0 festlegen, werden nur Fehlermeldungen mit dem Schweregrad 11 oder höher umgeleitet. Wenn Sie 1 angeben, wird die gesamte Fehlermeldungsausgabe (einschließlich PRINT) umgeleitet. Diese Option hat keine Auswirkungen, wenn Sie -o verwenden. Standardmäßig werden Meldungen an stdoutgesendet.

Hinweis

Für das Hilfsprogramm sqlcmd (Go) erfordert -r ein 0- oder 1-Argument.

-R

Gilt nur für: ODBC sqlcmd.

Bewirkt, dass sqlcmd aus SQL Server abgerufene numerische Spalten sowie Währungs-, Datums- und Zeitspalten basierend auf dem Gebietsschema des Clients lokalisiert. Standardmäßig werden diese Spalten entsprechend den regionalen Einstellungen des Servers angezeigt.

Hinweis

Unter Linux und macOS verwendet -R derzeit nur das Format en_US (Englisch, USA).

-u

Gibt an, dass Ausgabedatei unabhängig vom Format von Eingabedateiim Unicode-Format gespeichert wird.

Hinweis

Für das Hilfsprogramm sqlcmd (Go) enthält die generierte Unicode-Ausgabedatei die UTF-16 Little-Endian-Bytereihenfolge-Marke (BOM).

Abfrageausführungsoptionen

-e

Schreibt Eingabeskripts in das Standardausgabegerät (stdout).

-I

Gilt nur für: ODBC sqlcmd.

Hiermit wird die Verbindungsoption SET QUOTED_IDENTIFIER auf ON festgelegt. Die Standardeinstellung ist OFF. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).

Hinweis

Um das Verhalten von Bezeichnern in Anführungszeichen im Hilfsprogramm sqlcmd (Go) zu deaktivieren, fügen Sie SET QUOTED IDENTIFIER OFF in Ihren Skripts hinzu.

-q "cmdline query"

Führt eine Abfrage aus, wenn sqlcmd gestartet wird, aber sqlcmd nicht beendet, wenn die Abfrage abgeschlossen ist. Mehrere durch Semikolons getrennte Abfragen können ausgeführt werden. Schließen Sie die Abfrage in Anführungszeichen ein, wie im folgenden Beispiel gezeigt wird.

Geben Sie an der Eingabeaufforderung Folgendes ein:

sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Wichtig

Verwenden Sie nicht das Abschlusszeichen GO in der Abfrage.

Wenn -b zusammen mit dieser Option angegeben wird, wird sqlcmd beim Auftreten eines Fehlers beendet. -b wird an anderer Stelle in diesem Artikel beschrieben.

-Q "Cmdline-Abfrage"

Führt eine Abfrage aus, wenn sqlcmd startet, und beendet sqlcmdunmittelbar im Anschluss. Es können mehrere durch Semikolons getrennte Abfragen ausgeführt werden.

Schließen Sie die Abfrage in Anführungszeichen ein, wie im folgenden Beispiel gezeigt wird.

Geben Sie an der Eingabeaufforderung Folgendes ein:

sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Wichtig

Verwenden Sie nicht das Abschlusszeichen GO in der Abfrage.

Wenn -b zusammen mit dieser Option angegeben wird, wird sqlcmd beim Auftreten eines Fehlers beendet. -b wird an anderer Stelle in diesem Artikel beschrieben.

-t query_timeout

Hiermit wird angegeben, wie viele Sekunden verstreichen, bevor für einen Befehl (oder eine Transact-SQL-Anweisung) ein Timeout auftritt. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDSTATTIMEOUT festgelegt. Wenn kein query_timeout-Wert angegeben wird, tritt für den Befehl kein Timeout auf. query_timeout muss einer Zahl zwischen 1 und 65534 entsprechen. Wenn der angegebene Wert kein numerischer Wert ist oder außerhalb dieses Bereichs liegt, generiert sqlcmd eine Fehlermeldung.

Hinweis

Der tatsächliche Timeoutwert kann von dem angegebenen query_timeout Wert um mehrere Sekunden variieren.

-v var = Wert [ var = Wert... ]

Gilt für: Nur Windows. Linux und macOS werden nicht unterstützt.

Hiermit wird eine sqlcmd-Skriptvariable erstellt, die in einem sqlcmd-Skript verwendet werden kann.

Setzen Sie den Wert in Anführungszeichen, falls er Leerzeichen enthält. Sie können mehrere <var>="<value>"-Werte angeben. Wenn einer der angegebenen Werte fehlerhaft ist, generiert sqlcmd eine Fehlermeldung und wird beendet.

sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"

-x

Bewirkt, dass sqlcmd Skriptvariablen ignoriert. Dieser Parameter ist nützlich, wenn ein Skript viele INSERT Anweisungen enthält, die Zeichenfolgen enthalten können, die dasselbe Format wie normale Variablen aufweisen, z. B. $(<variable_name>).

Formatoptionen

-h Kopfzeilen

Gibt die Anzahl der Zeilen an, die zwischen den Spaltenüberschriften ausgegeben werden Standardmäßig werden die Überschriften für jede Ergebnismenge der Abfrage einmal gedruckt. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDHEADERS festgelegt. Mit -1 können Sie angeben, dass keine Überschriften ausgegeben werden sollen. Ein ungültiger Wert bewirkt, dass sqlcmd eine Fehlermeldung generiert und dann beendet wird.

-k [1 | 2]

Entfernt alle Steuerzeichen aus der Ausgabe, z. B. Tabstoppzeichen und Neue-Zeile-Zeichen Mit diesem Parameter bleibt die Spaltenformatierung erhalten, wenn Daten zurückgegeben werden.

  • -k entfernt Steuerzeichen.
  • -k1 ersetzt jedes Steuerzeichen durch ein Leerzeichen.
  • -k2 ersetzt aufeinander folgende Steuerzeichen durch ein einzelnes Leerzeichen.

-s col_separator

Gibt das Spaltentrennzeichen an. Der Standardwert ist ein Leerzeichen. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDCOLSEP festgelegt. Um Zeichen verwenden zu können, die für das Betriebssystem eine besondere Bedeutung haben (z. B. das kaufmännische Und-Zeichen (&) oder das Semikolon (;)), müssen Sie das Zeichen in Anführungszeichen (") einschließen. Das Spaltentrennzeichen kann ein beliebiges 8-Bit-Zeichen sein.

-w screen_width

Gibt die Bildschirmbreite für die Ausgabe an. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDCOLWIDTH festgelegt. Die Spaltenbreite muss eine Zahl größer als 8 und kleiner als 65536 sein. Wenn die angegebene Spaltenbreite außerhalb dieses Bereichs liegt, generiert sqlcmd eine Fehlermeldung. Die Standardbreite beträgt 80 Zeichen. Wenn eine Ausgabezeile die angegebene Spaltenbreite überschreitet, wird sie auf die nächste Zeile umbrochen.

-W

Mit dieser Option werden nachfolgende Leerzeichen aus einer Spalte entfernt. Verwenden Sie diese Option zusammen mit der -s-Option, um Daten aufzubereiten, die in eine andere Anwendung exportiert werden sollen. Die Option kann nicht mit der Option -y bzw. -Y verwendet werden.

-y variable_length_type_display_width

Dadurch wird die sqlcmd -Skriptvariable SQLCMDMAXVARTYPEWIDTHfestgelegt. Der Standardwert lautet 256. Sie begrenzt die Anzahl der Zeichen, die für die großen Datentypen variabler Länge zurückgegeben werden:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • xml
  • Benutzerdefinierte Datentypen (UDTs)
  • text
  • ntext
  • image

UDTs können je nach Implementierung eine feste Länge aufweisen. Wenn die Länge eines UDT mit fester Länge den Wert für display_width unterschreitet, hat dies keinen Einfluss auf den Wert des zurückgegebenen UDT. Wenn die Länge den Wert für Anzeigebreitejedoch überschreitet, wird die Ausgabe abgeschnitten.

Achtung

Verwenden Sie die -y 0 Option mit äußerster Vorsicht, da sie erhebliche Leistungsprobleme sowohl auf dem Server als auch im Netzwerk verursachen kann, je nach zurückgegebener Datengröße.

-Y fixed_length_type_display_width

Dadurch wird die sqlcmd -Skriptvariable SQLCMDMAXFIXEDTYPEWIDTHfestgelegt. Der Standardwert ist 0 (unbegrenzt). Er begrenzt die Anzahl der zurückgegebenen Zeichen für die folgenden Datentypen:

  • char(n), wobei 1 <= n<= 8000
  • nchar(n), wobei 1 <= n<= 4000
  • varchar(n), wobei 1 <= n<= 8000
  • nvarchar(n), wobei 1 <= n<= 4000
  • varbinary(n), wobei 1 <= n<= 4000
  • sql_variant

Optionen für die Fehlerberichterstellung

-b

Hiermit wird angegeben, dass sqlcmd beendet und ein DOS ERRORLEVEL-Wert zurückgegeben wird, wenn ein Fehler auftritt. Für die ERRORLEVEL-Variable wird der Wert 1 zurückgegeben, wenn der Schweregrad der SQL Server-Fehlermeldung größer als 10 ist. Andernfalls wird der Wert 0 zurückgegeben. Wenn die -V-Option festgelegt ist, meldet sqlcmd neben -b keinen Fehler, wenn der Schweregrad niedriger ist als die Werte, die mit -V festgelegt wurden. Mit Eingabeaufforderungs-Batchdateien kann der Wert von ERRORLEVEL getestet und der Fehler entsprechend behoben werden. sqlcmd meldet keine Fehler für Schweregrad 10 (Informationsmeldungen).

Wenn das sqlcmd-Skript einen falschen Kommentar bzw. einen Syntaxfehler enthält oder eine Skriptvariable fehlt, wird der ERRORLEVEL-Wert 1 zurückgegeben.

-m error_level

Hiermit wird gesteuert, welche Fehlermeldungen an stdout gesendet werden. Fehlermeldungen mit einem Schweregrad, der größer oder gleich diesem Wert ist, werden gesendet. Wenn dieser Wert auf -1festgelegt ist, werden alle Meldungen gesendet, einschließlich der Informationsmeldungen. Zwischen -m und -1 sind keine Leerzeichen zulässig. Beispielsweise ist -m-1 zulässig, -m -1 jedoch nicht.

Mit dieser Option wird außerdem die sqlcmd-Skriptvariable SQLCMDERRORLEVEL festgelegt. Diese Variable hat den Standardwert 0.

-V Fehlerschweregrad

Hiermit wird der Schweregrad gesteuert, der zur Festlegung der ERRORLEVEL-Variablen verwendet wird. Für Fehlermeldungen mit einem Schweregrad, der größer oder gleich diesem Wert ist, wird ERRORLEVEL festgelegt. Werte kleiner 0 werden als 0 zurückgegeben. Batchdateien und CMD-Dateien können verwendet werden, um den Wert der ERRORLEVEL-Variablen zu testen.

Sonstige Optionen

-a packet_size

Fordert ein Paket einer anderen Größe an. Durch diese Option wird die sqlcmd-Skriptvariable SQLCMDPACKETSIZE festgelegt. packet_size muss einem Wert zwischen 512 und 32767 entsprechen. Der Standardwert lautet 4096. Ein höherer Wert für die Paketgröße kann das Leistungsverhalten beim Ausführen von Skripts verbessern, die zahlreiche Transact-SQL-Anweisungen zwischen GO-Befehlen aufweisen. Sie können eine größere Paketgröße anfordern. Wenn die Anforderung abgelehnt wird, verwendet sqlcmd jedoch den Standardwert des Servers für die Paketgröße.

-c batch_terminator

Gibt das Batchabschlusszeichen an. Standardmäßig werden Befehle abgeschlossen und an SQL Server gesendet, indem das Wort GO in eine eigene Zeile eingegeben wird. Wenn Sie das Batchabschlusszeichen neu festlegen, dürfen Sie keine für Transact-SQL reservierten Schlüsselwörter oder Zeichen verwenden, die eine spezielle Bedeutung für das Betriebssystem haben, und zwar auch dann nicht, wenn vor dem Wort bzw. Zeichen ein umgekehrter Schrägstrich steht.

-L[c]

Gilt für: Nur Windows. Linux und macOS werden nicht unterstützt.

Listet die lokal konfigurierten Servercomputer sowie die Namen der Servercomputer auf, die auf dem Netzwerk senden. Dieser Parameter kann nicht in Verbindung mit anderen Parametern verwendet werden. Es können maximal 3.000 Servercomputer aufgelistet werden. Sollte die Serverliste aufgrund der Puffergröße gekürzt werden, erscheint eine Warnnachricht.

Hinweis

Aufgrund der Art der Übertragung in Netzwerken erhalten sqlcmd- möglicherweise keine zeitnahe Antwort von allen Servern. Daher kann die Liste der zurückgegebenen Server für jeden Aufruf dieser Option variieren.

Wenn der optionale Parameter c angegeben ist, wird die Ausgabe ohne die Kopfzeile Servers: angezeigt. Jede Serverzeile wird ohne führende Leerzeichen ausgegeben. Diese Darstellung wird als bereinigte Ausgabe bezeichnet. Durch die einfache Ausgabe wird die Verarbeitungsleistung von Skriptsprachen verbessert.

-p[1]

Gibt Leistungsstatistiken für jedes Resultset aus Folgende Darstellung ist ein Beispiel für das Format von Leistungsstatistiken.

Network packet size (bytes): n

x xact[s]:

Clock Time (ms.): total       t1  avg       t2 (t3 xacts per sec.)

Wo:

  • x = Anzahl der von SQL Server verarbeiteten Transaktionen.
  • t1 = Gesamtdauer aller Transaktionen.
  • t2 = Durchschnittliche Dauer einer einzelnen Transaktion.
  • t3 = Durchschnittliche Anzahl von Transaktionen pro Sekunde.

Alle Zeitangaben erfolgen in Millisekunden.

Wird der optionale Parameter 1 angegeben, wird die Statistik im durch Doppelpunkte getrennten Format ausgegeben, das problemlos in eine Kalkulationstabelle importiert oder von einem Skript verarbeitet werden kann.

Wird für den optionalen Parameter ein anderer Wert als 1angegeben, wird ein Fehler generiert und sqlcmd beendet.

-X[1]

Deaktiviert Befehle, die die Systemsicherheit gefährden können, wenn sqlcmd aus einer Batchdatei ausgeführt wird. Die deaktivierten Befehle werden trotzdem erkannt; sqlcmd gibt eine Warnmeldung aus und setzt die Ausführung fort. Wenn der optionale Parameter 1 angegeben wird, generiert sqlcmd eine Fehlermeldung und wird dann beendet. Die folgenden Befehle werden deaktiviert, wenn die Option -X verwendet wird:

  • ED
  • !!befehl

Wenn die -X-Option angegeben wird, verhindert sie die Übergabe von Umgebungsvariablen an sqlcmd. Sie verhindert auch die Ausführung des Startskripts, das mithilfe der Skriptvariablen SQLCMDINI angegeben wurde. Weitere Informationen zu sqlcmd-Skriptvariablen finden Sie unter Verwenden von „sqlcmd“ mit Skriptvariablen.

-?

Zeigt die Version von sqlcmd und eine Syntaxzusammenfassung der sqlcmd -Optionen an.

Hinweis

Unter macOS führen Sie stattdessen sqlcmd '-?' (mit Anführungszeichen) aus.

Hinweise

Die Optionen müssen nicht in der Reihenfolge verwendet werden, in der sie im Abschnitt zur Syntax gezeigt wurden.

Hinweis

Wenn Sie die option -i gefolgt von einem oder mehreren zusätzlichen Parametern verwenden, müssen Sie ein Leerzeichen zwischen dem Parameter und dem Wert verwenden. Dies ist ein bekanntes Problem in sqlcmd (Go).

Wenn mehrere Ergebnisse zurückgegeben werden, gibt sqlcmd eine Leerzeile zwischen den einzelnen Resultsets in einem Batch aus. Außerdem wird die Meldung <x> rows affected nicht angezeigt, wenn sie für die ausgeführte Anweisung nicht gilt.

Wenn Sie sqlcmd interaktiv verwenden möchten, geben Sie sqlcmd an der Eingabeaufforderung und eine oder mehrere der weiter oben in diesem Artikel beschriebenen Optionen ein. Weitere Informationen finden Sie unter Verwenden des Hilfsprogramms „sqlcmd“

Hinweis

Die Optionen -l, -Q, -Z und -i bewirken, dass sqlcmd nach der Ausführung beendet wird.

Die gesamte Länge der sqlcmd-Befehlszeile in der Befehlsumgebung (z. B. cmd.exe oder bash) einschließlich aller Argumente und erweiterten Variablen wird durch das zugrunde liegende Betriebssystem festgelegt.

Rangfolge der Variablen (vom niedrigsten bis zum höchsten Rang)

  1. Umgebungsvariablen auf Systemebene
  2. Umgebungsvariablen auf Benutzerebene
  3. Vor der Ausführung von sqlcmd an der Eingabeaufforderung festgelegte Befehlsshell (SET X=Y)
  4. sqlcmd -v X=Y
  5. :Setvar X Y

Hinweis

Öffnen Sie in der Systemsteuerung die Option System, und wählen Sie anschließend die Registerkarte Erweitert aus, um die Umgebungsvariablen anzuzeigen.

sqlcmd-Skriptvariablen

Variable Zugehörige Option R/W Standard
SQLCMDUSER -U R ""
SQLCMDPASSWORD -P -- ""
SQLCMDSERVER -S R "DefaultLocalInstance"
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 -a 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 ""
SQLCMDUSEAAD -G R/W ""
  • SQLCMDUSER, SQLCMDPASSWORD und SQLCMDSERVER werden festgelegt, wenn :Connect verwendet wird.

  • Durch R wird angegeben, dass der Wert nur einmal während der Programminitialisierung festgelegt werden kann.

  • Durch R/W wird angegeben, dass der Wert mithilfe des :setvar-Befehls geändert werden kann und sich der neue Wert auf nachfolgende Befehle auswirkt.

sqlcmd-Befehle

Zusätzlich zu den Transact-SQL-Anweisungen in sqlcmd sind auch die folgenden Befehle verfügbar:

  • GO [ <count> ]
  • :List
  • [:]RESET
  • :Error
  • [:]ED1
  • :Out
  • [:]!!
  • :Perftrace
  • [:]QUIT
  • :Connect
  • [:]EXIT
  • :On Error
  • :r
  • :Help
  • :ServerList1
  • :XML [ ON | OFF ]1
  • :Setvar
  • :Listvar

1 Nicht unterstützt unter Linux oder macOS.

Beachten Sie bei der Verwendung von sqlcmd -Befehlen Folgendes:

  • Alle sqlcmd-Befehle, außer GO, müssen mit einem Doppelpunkt (:) vorangestellt werden.

    Wichtig

    Um die Abwärtskompatibilität mit vorhandenen osql--Skripts aufrechtzuerhalten, werden einige der Befehle ohne den Doppelpunkt erkannt, der durch die :angegeben wird.

  • sqlcmd -Befehle werden nur erkannt, wenn sie am Anfang einer Zeile stehen.

  • Bei keinem sqlcmd-Befehl wird die Groß- und Kleinschreibung beachtet.

  • Jeder Befehl muss in einer eigenen Zeile stehen. Auf einen Befehl darf keine Transact-SQL-Anweisung oder ein anderer Befehl folgen.

  • Die Befehle werden sofort ausgeführt. Sie werden nicht wie Transact-SQL-Anweisungen im Ausführungspuffer abgelegt.

Bearbeitungsbefehle

[:]ED

Startet den Text-Editor. Mit diesem Editor kann der aktuelle Transact-SQL-Batch oder der zuletzt ausgeführte Batch bearbeitet werden. Um den zuletzt ausgeführten Batch zu bearbeiten, muss der ED -Befehl unmittelbar nach Abschluss der Ausführung des letzten Batches eingegeben werden.

Der Text-Editor wird durch die Umgebungsvariable SQLCMDEDITOR definiert. Der Standardeditor ist Edit. Legen Sie die Umgebungsvariable SQLCMDEDITOR fest, um den Editor zu ändern. Wenn Sie beispielsweise Microsoft Notepad als Editor festlegen möchten, geben Sie Folgendes an der Eingabeaufforderung ein:

SET SQLCMDEDITOR=notepad

[:]RESET

Löscht den Anweisungscache

:List

Gibt den Inhalt des Anweisungscaches aus

Variablen

:Setvar <var> [ "value" ]

Definiert sqlcmd -Skriptvariablen. Skriptvariablen haben das folgende Format: $(VARNAME).

Bei Variablennamen wird die Groß- und Kleinschreibung nicht beachtet.

Skriptvariablen können folgendermaßen festgelegt werden:

  • Implizit eine Befehlszeilenoption verwenden. Die Option -l legt beispielsweise die sqlcmd-Variable SQLCMDLOGINTIMEOUT fest.
  • Explizit – mithilfe des :Setvar -Befehls.
  • Durch die Definition einer Umgebungsvariablen vor der Ausführung von sqlcmd.

Hinweis

Die Option -X verhindert, dass Umgebungsvariablen an sqlcmdübergeben werden.

Wenn eine Variable, die mithilfe von :Setvar definiert wurde, denselben Namen wie eine Umgebungsvariable aufweist, ist die mit :Setvar definierte Variable vorrangig.

Variablennamen dürfen keine Leerzeichen enthalten.

Variablennamen können nicht dieselbe Form wie ein Variablenausdruck (z. B. $(var)) aufweisen.

Wenn der Zeichenfolgenwert der Skriptvariablen Leerzeichen enthält, müssen Sie den Wert in Anführungszeichen einschließen. Wenn für eine Skriptvariable kein Wert angegeben wird, wird die Skriptvariable ausgelassen.

:Listvar

Zeigt die Liste der zurzeit festgelegten Skriptvariablen an.

Hinweis

Nur Skriptingvariablen, die von sqlcmd festgelegt werden, und Variablen, die mit dem :Setvar Befehl festgelegt werden, werden angezeigt.

Ausgabebefehle

:Error <Dateiname> | STDERR | STDOUT

Alle Fehlerausgaben werden an die durch filename angegebene Datei, an stderr oder an stdout umgeleitet. Der :Error-Befehl kann mehrmals in einem Skript verwendet werden. Die Fehlerausgabe wird standardmäßig an stderr gesendet.

  • filename

    Erstellt eine Datei, in die die Ausgabe geschrieben wird, und öffnet sie. Wenn die Datei bereits vorhanden ist, wird sie auf 0 Byte gekürzt. Wenn der Zugriff auf die Datei aufgrund unzureichender Berechtigungen oder anderer Ursachen nicht möglich ist, wird die Ausgabe nicht umgeleitet, sondern an das zuletzt angegebene Ziel oder an das Standardziel gesendet.

  • STDERR

    Leitet die Fehlerausgabe in den stderr-Stream um. Wenn dieser Datenstrom umgeleitet wurde, wird die Fehlerausgabe von dem Ziel empfangen, zu dem der Datenstrom umgeleitet wurde.

  • STDOUT

    Leitet die Fehlerausgabe in den stdout-Datenstrom. Wenn dieser Datenstrom umgeleitet wurde, wird die Fehlerausgabe von dem Ziel empfangen, zu dem der Datenstrom umgeleitet wurde.

:Out <filename> | STDERR | STDOUT

Erstellt und leitet alle Abfrageergebnisse auf die durch Dateiname angegebene Datei, nach stderr oder nach stdout um. Standardmäßig wird die Ausgabe an stdout gesendet. Wenn die Datei bereits vorhanden ist, wird sie auf 0 Byte gekürzt. Der :Out-Befehl kann mehrmals in einem Skript verwendet werden.

:Perftrace <filename> | STDERR | STDOUT

Erstellt und leitet alle Informationen zur Leistungsnachverfolgung in der bzw. an die durch filename angegebene Datei, an stderr oder an stdout um. Standardmäßig wird die Ausgabe zur Leistungsnachverfolgung an stdout gesendet. Wenn die Datei bereits vorhanden ist, wird sie auf 0 Byte gekürzt. Der :Perftrace-Befehl kann mehrmals in einem Skript verwendet werden.

Befehle zur Ausführungssteuerung

:On Error [ exit | ignore ]

Legt die Aktion fest, die ausgeführt werden soll, wenn ein Fehler während der Skript- oder Batchausführung auftritt.

Wird die exit-Option verwendet, wird sqlcmd mit dem entsprechenden Fehlerwert beendet.

Wenn die ignore-Option verwendet wird, ignoriert sqlcmd den Fehler und setzt die Batch- oder Skriptausführung fort. Standardmäßig wird eine Fehlermeldung ausgegeben.

[:]BEENDEN

Bewirkt, dass sqlcmd beendet wird.

[:]EXIT [ ( statement ) ]

Diese Option gibt Ihnen die Möglichkeit, das Ergebnis einer SELECT-Anweisung als Rückgabewert von sqlcmd zu verwenden. Wenn numerisch, wird die erste Spalte der letzten Ergebniszeile in eine 4 Byte lange ganze Zahl (Long) konvertiert. MS-DOS, Linux und macOS übergeben das niedrige Byte an den übergeordneten Prozess oder an die Fehlerebene des Betriebssystems. Windows 2000 und spätere Versionen übergeben den gesamten 4-Byte-Integer. Die Syntax ist :EXIT(query).

Zum Beispiel:

:EXIT(SELECT @@ROWCOUNT)

Sie können den :EXIT-Parameter auch als Teil einer Batchdatei einschließen. Geben Sie an der Eingabeaufforderung z. B. Folgendes ein:

sqlcmd -Q ":EXIT(SELECT COUNT(*) FROM '%1')"

Das Hilfsprogramm sqlcmd sendet alle zwischen den Klammern (()) stehende Angaben an den Server. Wenn eine gespeicherte Systemprozedur eine Menge auswählt und einen Wert zurückgibt, wird nur die Auswahl zurückgegeben. Die :EXIT()-Anweisung ohne Inhalt zwischen den Klammern führt alle vorhergehenden Anweisungen im Batch aus und endet dann ohne Rückgabewert.

Wird eine fehlerhafte Abfrage angegeben, wird sqlcmd beendet, ohne dass ein Wert zurückgegeben wird.

Hier ist eine Liste mit EXIT Formaten:

  • :EXIT

    Führt den Batch nicht aus, beendet das Programm sofort und gibt keinen Wert zurück.

  • :EXIT( )

    Führt die Batch-Datei aus und beendet die Ausführung, ohne einen Wert zurückzugeben.

  • :EXIT(query)

    Führt das Batch mit der darin enthaltenen Abfrage aus und beendet dann das Programm, nachdem die Ergebnisse der Abfrage zurückgegeben wurden.

Wird RAISERROR in einem sqlcmd-Skript verwendet und der Status 127 ausgelöst, wird sqlcmd beendet und die entsprechende Meldungs-ID an den Client zurückgegeben. Zum Beispiel:

RAISERROR(50001, 10, 127)

Dieser Fehler bewirkt, dass das sqlcmd-Skript beendet und die Meldungs-ID 50001 an den Client zurückgegeben wird.

Die Rückgabewerte -1 bis -99 sind für SQL Server reserviert. sqlcmd definiert die folgenden zusätzlichen Rückgabewerte:

Rückgabewert BESCHREIBUNG
-100 Fehler beim Auswählen des Rückgabewerts.
-101 Beim Auswählen eines Rückgabewerts wurden keine Zeilen gefunden.
-102 Beim Auswählen des Rückgabewerts ist ein Konvertierungsfehler aufgetreten.

GO [count]

GO signalisiert sowohl das Ende eines Batches als auch die Ausführung aller zwischengespeicherten Transact-SQL-Anweisungen. Das Batch wird mehrmals als separate Batches ausgeführt. Sie können eine Variable in einem einzelnen Batch nicht mehr als einmal deklarieren.

Verschiedene Befehle

:r <Dateiname>

Analysiert zusätzliche Transact-SQL-Anweisungen und sqlcmd-Befehle aus der durch Dateiname angegebenen Datei und schreibt das Ergebnis in den Anweisungscache. Dateiname wird relativ zum Startverzeichnis gelesen, in dem sqlcmd ausgeführt wurde.

Wenn die Datei Transact-SQL-Anweisungen enthält, auf die nicht GO folgt, müssen Sie GO in der ersten Zeile nach :r eingeben.

Die Datei wird gelesen und ausgeführt, nachdem ein Batchabschlusszeichen gefunden wurde. Sie können den :r-Befehl mehrmals verwenden. Die Datei kann jeden sqlcmd-Befehl enthalten, einschließlich des Batch-Beendigungszeichens GO.

Hinweis

Die Zeilenanzahl, die im interaktiven Modus angezeigt wird, wird bei jedem :r aufgetretenen Befehl um einen erhöht. Der Befehl :r wird in der Ausgabe des Listenbefehls angezeigt.

:ServerList

Listet die lokal konfigurierten Server sowie die Namen der Server auf, die im Netzwerk senden.

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]]

Stellt eine Verbindung mit einer Instanz von SQL Server her. Schließt außerdem die aktuelle Verbindung.

Timeoutoptionen:

Wert Verhalten
0 Ewig warten
n>0 Wartezeit beträgt n Sekunden

Die Skriptvariable SQLCMDSERVER spiegelt die zurzeit aktive Verbindung wider.

Wenn timeout nicht angegeben wird, gilt standardmäßig der Wert der SQLCMDLOGINTIMEOUT-Variablen.

Wenn nur user_name angegeben wird (entweder als Option oder als Umgebungsvariable), werden die Benutzer*innen zur Eingabe eines Kennworts aufgefordert. Benutzer werden nicht benachrichtigt, wenn die SQLCMDUSER oder SQLCMDPASSWORD Umgebungsvariablen festgelegt sind. Wenn Sie weder Optionen noch Umgebungsvariablen angegeben, wird der Windows-Authentifizierungsmodus für die Anmeldung verwendet. Wenn z. B. mithilfe integrierter Sicherheit eine Verbindung mit einer Instanz, instance1, von SQL Server, myserver, hergestellt werden soll, geben Sie folgenden Befehl ein:

:connect myserver\instance1

Wenn mithilfe von Skriptvariablen eine Verbindung mit der Standardinstanz auf myserver hergestellt werden soll, würden Sie folgende Einstellungen verwenden:

:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)

[:]!! Befehl

Führt Betriebssystembefehle aus. Um einen Betriebssystembefehl auszuführen, beginnen Sie eine Zeile mit zwei Ausrufezeichen ( !! ) gefolgt von dem Betriebssystembefehl. Zum Beispiel:

:!! dir

Hinweis

Der Befehl wird auf dem Computer ausgeführt, auf dem sqlcmd ausgeführt wird.

:XML [ EIN | AUS ]

Weitere Informationen finden Sie unter XML-Ausgabeformat und JSON-Ausgabeformat in diesem Artikel.

:Hilfe

Hiermit werden die sqlcmd-Befehle zusammen mit einer kurzen Beschreibung jedes Befehls aufgelistet.

sqlcmd-Dateinamen

sqlcmd -Eingabedateien können mit der Option -i oder dem Befehl :r angegeben werden. Ausgabedateien können mit der -o Option oder den :Error, :Out und :Perftrace Befehlen angegeben werden. Es folgen einige Richtlinien für das Verwenden dieser Dateien:

  • :Error, :Outund :Perftrace sollten separate Dateinamenwerte verwenden. Wenn derselbe Dateinamen verwendet wird, können Eingaben aus den Befehlen gemischt werden.

  • Wenn eine Eingabedatei, die sich auf einem Remoteserver befindet, von sqlcmd auf einem lokalen Computer aufgerufen wird und die Datei einen Laufwerksdateipfad wie :Out c:\OutputFile.txt enthält, wird die Ausgabedatei auf dem lokalen Computer und nicht auf dem Remoteserver erstellt.

  • Gültige Dateipfade sind beispielsweise: C:\<filename>, \\<Server>\<Share$>\<filename> und "C:\Some Folder\<file name>". Verwenden Sie Anführungszeichen, wenn der Pfad ein Leerzeichen enthält.

  • Mit jeder neuen sqlcmd-Sitzung werden eventuell schon vorhandene gleichnamige Dateien überschrieben.

Informationsmeldungen

sqlcmd gibt alle vom Server gesendeten Informationsmeldungen aus. Im folgenden Beispiel wird eine Informationsmeldung ausgegeben, nachdem die Transact-SQL-Anweisungen ausgeführt wurden.

Starten Sie sqlcmd. Geben Sie an der sqlcmd -Eingabeaufforderung folgende Abfrage ein:

USE AdventureWorks2022;
GO

Wenn Sie die EINGABETASTE drücken, wird folgende Informationsmeldung ausgegeben:

Changed database context to 'AdventureWorks2022'.

Ausgabeformat von Transact-SQL-Abfragen

sqlcmd gibt zuerst eine Spaltenüberschrift aus, die die in der SELECT-Liste angegebenen Spaltennamen enthält. Die Spaltennamen werden durch das SQLCMDCOLSEP-Zeichen getrennt. Standardmäßig handelt es sich hierbei um ein Leerzeichen. Wenn der Spaltenname kürzer als die Spaltenbreite ist, wird die Ausgabe bis zur nächsten Spalte mit Leerzeichen aufgefüllt.

Auf diese Zeile folgt eine Trennlinie, die aus einer Reihe von Bindestrichen besteht. Die folgende Ausgabe zeigt ein Beispiel.

Starten Sie sqlcmd. Geben Sie an der sqlcmd -Eingabeaufforderung folgende Abfrage ein:

USE AdventureWorks2022;
SELECT TOP (2) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO

Wenn Sie die EINGABETASTE drücken, wird das folgende Resultset zurückgegeben.

BusinessEntityID FirstName    LastName
---------------- ------------ ----------
285              Syed         Abbas
293              Catherine    Abel
(2 row(s) affected)

Obwohl die BusinessEntityID Spalte nur vier Zeichen breit ist, wird sie erweitert, um den längeren Spaltennamen aufzunehmen. Standardmäßig wird die Ausgabe mit dem 80. Zeichen beendet. Diese Breite kann geändert werden, indem Sie die -w-Option verwenden oder die SQLCMDCOLWIDTH-Skriptvariable festlegen.

XML-Ausgabeformat

Die XML-Ausgabe, die sich aus der FOR XML-Klausel ergibt, wird unformatiert in einem fortlaufenden Datenstrom ausgegeben.

Verwenden Sie den Befehl :XML ON, wenn Sie eine Ausgabe im XML-Format erwarten.

Hinweis

sqlcmd gibt Fehlermeldungen im üblichen Format zurück. Die Fehlermeldungen werden auch im XML-Textstrom im XML-Format ausgegeben. Mit :XML ON zeigt sqlcmd keine Informationsmeldungen an.

Verwenden Sie den folgenden Befehl, um den XML-Modus zu deaktivieren: :XML OFF.

Der GO-Befehl sollte nicht verwendet werden, bevor der :XML OFF-Befehl ausgegeben wurde, da :XML OFF bewirkt, dass sqlcmd zur zeilenbasierten Ausgabe zurückkehrt.

Es ist nicht möglich, XML-Daten (Datenstrom) und Rowsetdaten zu mischen. Wenn der :XML ON Befehl nicht vor einer Transact-SQL-Anweisung ausgeführt wurde, die XML-Datenströme ausgibt, ist die Ausgabe verzerrt. Nachdem der :XML ON Befehl ausgegeben wurde, können Sie keine Transact-SQL Anweisungen ausführen, die reguläre Zeilensätze ausgeben.

Hinweis

Der Befehl :XML unterstützt die SET STATISTICS XML-Anweisung nicht.

JSON-Ausgabeformat

Verwenden Sie den Befehl :XML ON, wenn Sie eine Ausgabe im JSON-Format erwarten. Andernfalls enthält die Ausgabe sowohl den Spaltennamen als auch den JSON-Text. Diese Ausgabe ist kein gültiger JSON-Code.

Verwenden Sie den folgenden Befehl, um den XML-Modus zu deaktivieren: :XML OFF.

Weitere Informationen finden Sie unter XML-Ausgabeformat in diesem Artikel.

Verwenden der Microsoft Entra-Authentifizierung

Beispiele, in denen die Microsoft Entra-Authentifizierung verwendet wird:

sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net  -G  -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30

DSN-Unterstützung in sqlcmd und bcp

Sie können einen Datenquellennamen (Data Source Name, DSN) anstelle eines Servernamens in sqlcmd oder bcp -S option (oder sqlcmd :Connect command) angeben, wenn Sie angeben -D. -D sorgt dafür, dass sqlcmd oder bcp eine Verbindung mit dem Server herstellen kann, der in DSN durch die Option -S angegeben ist.

System-DSNs werden in der odbc.ini Datei im ODBC-Verzeichnis SysConfigDir (/etc/odbc.ini in Standardinstallationen) gespeichert. Benutzer-DSNs werden in .odbc.ini im Basisverzeichnis eines Benutzers (~/.odbc.ini) gespeichert.

Auf Windows-Systemen werden System- und Benutzer-DSNs in der Registrierung gespeichert und über odbcad32.exediese verwaltet. bcp und sqlcmd unterstützen keine Datei-DSNs.

Eine Liste der Einträge, die vom Treiber unterstützt werden, finden Sie unter Schlüsselwörter und Attribute von DSN- und Verbindungszeichenfolgen.

In einem DSN ist nur der DRIVER Eintrag erforderlich, aber um eine Verbindung mit einem Remoteserver herzustellen, benötigt sqlcmd oder bcp einen Wert im SERVER Element. Wenn das SERVER Element im DSN leer oder nicht vorhanden ist, versuchen sqlcmd und bcp , eine Verbindung mit der Standardinstanz im lokalen System herzustellen.

Wenn Sie bcp auf Windows-Systemen verwenden, benötigen SQL Server 2017 (14.x) und frühere Versionen den SQL Native Client 11-Treiber (sqlncli11.dll), während SQL Server 2019 (15.x) und höhere Versionen den Microsoft ODBC-Treiber 17 für SQL Server-Treiber (msodbcsql17.dll) erfordern.

Wenn die gleiche Option sowohl im DSN als auch in der Befehlszeile "sqlcmd " oder "bcp " angegeben ist, überschreibt die Befehlszeilenoption den im DSN verwendeten Wert. Wenn z. B. der DSN einen DATABASE Eintrag enthält und die sqlcmd Befehlszeile -d enthält, wird der an -d übergebene Wert verwendet. Wenn Trusted_Connection=yes im DSN angegeben wird, wird die Kerberos-Authentifizierung verwendet; Benutzername (-U) und Kennwort (-P), falls angegeben, werden ignoriert.

Vorhandene Skripts, die aufgerufen isql werden, können so geändert werden, dass sqlcmd verwendet wird, indem der folgende Alias definiert wird: alias isql="sqlcmd -D"

Bewährte Methoden für die Verwendung von sqlcmd

Die folgenden Methoden haben sich dazu bewährt, Sicherheit und Effizienz zu optimieren.

  • Verwenden Sie die integrierte Sicherheit von Windows.

  • Verwenden Sie in automatisierten Umgebungen -X[1].

  • Schützen Sie Eingabe- und Ausgabedateien, indem Sie die geeigneten Dateisystemberechtigungen verwenden.

  • Führen Sie aus Leistungsgründen möglichst alle Aufgaben in einer einzigen sqlcmd -Sitzung, nicht in einer Reihe von verschiedenen Sitzungen aus.

  • Legen Sie Timeout-Werte für die Ausführung von Stapeln oder Abfragen fest, die höher sind als die erwartete Ausführungszeit des Stapels oder der Abfrage.

Maximieren Sie mit folgenden Methoden die Richtigkeit:

  • Verwenden Sie -V 16, um Nachrichten des Schweregrads 16 zu protokollieren. Meldungen des Schweregrads 16 verweisen auf allgemeine Fehler, die die Benutzer*innen korrigieren können.

  • Überprüfen Sie den Exit-Code und die Variable DOS ERRORLEVEL, nachdem der Prozess beendet ist. sqlcmd gibt normalerweise 0 zurück. Andernfalls wird der ERRORLEVEL-Wert wie von -V konfiguriert festgelegt. Mit anderen Worten: Erwarten Sie nicht, dass ERRORLEVEL mit der Fehlernummer übereinstimmt, die von SQL Server gemeldet wird. Die Fehlernummer ist ein SQL Server-spezifischer Wert, der der Systemfunktion @@ERROR entspricht. ERRORLEVEL ist ein sqlcmd-spezifischer Wert, der angibt, warum sqlcmd beendet wurde. Zudem wird der Wert durch Angabe des Befehlszeilenarguments -b beeinflusst.

Die Verwendung von -V 16 in Kombination mit der Überprüfung von Exitcode und DOS ERRORLEVEL kann dazu beitragen, Fehler in automatisierten Umgebungen zu erfassen, insbesondere Qualitätsschranken vor einer Produktionseinführung.


Zusätzliche Ressourcen