osql (Dienstprogramm)

Das Dienstprogramm osql ermöglicht es Ihnen, Transact-SQL-Anweisungen, Systemprozeduren und Skriptdateien einzugeben. Dieses Dienstprogramm verwendet ODBC, um Daten mit dem Server auszutauschen.

Wichtiger HinweisWichtig

Dieses Feature wird in einer zukünftigen Version von SQL Server entfernt. Vermeiden Sie die Verwendung dieses Features bei neuen Entwicklungsarbeiten, und planen Sie die Änderung von Anwendungen, die dieses Feature zurzeit verwenden. Verwenden Sie stattdessen sqlcmd. Weitere Informationen finden Sie unter sqlcmd (Dienstprogramm).

Syntax

osql
[-?] |
[-L] |
[
  {
     {-Ulogin_id [-Ppassword]} | –E }
     [-Sserver_name[\instance_name]] [-Hwksta_name] [-ddb_name]
     [-ltime_out] [-ttime_out] [-hheaders]
     [-scol_separator] [-wcolumn_width] [-apacket_size]
     [-e] [-I] [-D data_source_name]
     [-ccmd_end] [-q "query"] [-Q"query"]
     [-n] [-merror_level] [-r {0 | 1}]
     [-iinput_file] [-ooutput_file] [-p]
     [-b] [-u] [-R] [-O]
]

Argumente

  • -?
    Zeigt eine Syntaxzusammenfassung der osql-Schalter an.

  • -L
    Listet die lokal konfigurierten Server sowie die Namen der Server auf, die Nachrichten über das Netzwerk senden.

    HinweisHinweis

    Aufgrund der Eigenschaften des Broadcastings in Netzwerken ist es möglich, dass osql nicht von allen Servern rechtzeitig eine Antwort empfängt. Aus diesem Grund kann die Liste der zurückgegebenen Server mit jedem Aufruf dieser Option variieren.

  • -Ulogin_id
    Die Benutzeranmelde-ID. Bei Anmelde-IDs wird nach Groß- und Kleinschreibung unterschieden.

  • -Ppassword
    Ein vom Benutzer angegebenes Kennwort. Wenn die Option -P nicht verwendet wird, fordert osql zur Eingabe eines Kennworts auf. Wenn die Option -P am Ende der Befehlszeile ohne Angabe eines Kennworts verwendet wird, verwendet osql das Standardkennwort (NULL).

    SicherheitshinweisSicherheitshinweis

    Verwenden Sie kein leeres Kennwort. Verwenden Sie ein sicheres Kennwort. Weitere Informationen finden Sie unter Sichere Kennwörter.

    Bei Kennwörtern wird nach Groß- und Kleinschreibung unterschieden.

    Über die OSQLPASSWORD-Umgebungsvariable können Sie ein Standardkennwort für die aktuelle Sitzung festlegen. Dadurch müssen Sie keine Kennwörter in Batchdateien hartcodieren.

    Wenn Sie kein Kennwort mit der Option -P angeben, überprüft osql zuerst die OSQLPASSWORD-Variable. Wurde kein Wert festgelegt, verwendet osql das Standardkennwort (NULL). Im folgenden Beispiel wird die OSQLPASSWORD-Variable an der Eingabeaufforderung festgelegt, und dann wird auf das Dienstprogramm osql zugegriffen:

    C:\>SET OSQLPASSWORD=abracadabra
    C:\>osql 
    
    SicherheitshinweisSicherheitshinweis

    Zum Maskieren des Kennworts sollten Sie die Option -P nicht in Verbindung mit der Option -U verwenden. Drücken Sie stattdessen nach der Angabe von osql mit der Option -U und anderen Schaltern (geben Sie -P nicht an) die EINGABETASTE. Sie werden daraufhin von osql zur Angabe eines Kennworts aufgefordert. Durch diese Methode ist sichergestellt, dass das Kennwort bei der Eingabe maskiert wird.

  • -E
    Verwendet eine vertrauenswürdige Verbindung, statt ein Kennwort anzufordern.

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

  • -Hwksta_name
    Der Name einer Arbeitsstation. Dieser Name ist in sysprocesses.hostname gespeichert und wird mithilfe von sp_who angezeigt. Wenn diese Option nicht angegeben ist, wird der Name des aktuellen Computers angenommen.

  • -ddb_name
    Gibt die USE db_name -Anweisung aus, wenn osqlgestartet wird.

  • ltime_out
    Gibt an, nach wie vielen Sekunden ein Timeout bei der osql-Anmeldung auftritt. Der Standardwert für das Timeout eines osql-Anmeldevorgangs ist acht Sekunden.

  • ttime_out
    Gibt an, nach wie vielen Sekunden der Befehl wegen eines Timeout abgebrochen wird. Wenn für time_out kein Wert angegeben wird, tritt für die Befehle kein Timeout ein.

  • -hheaders
    Gibt die Anzahl der Zeilen an, die zwischen den Spaltenüberschriften gedruckt werden. Standardmäßig werden die Überschriften für jedes Resultset der Abfrage einmal gedruckt. Mit -1 können Sie angeben, dass keine Überschriften gedruckt werden sollen. Wenn -1 verwendet wird, darf zwischen dem Parameter und der Einstellung kein Leerzeichen stehen (d. h. -h-1 und nicht -h -1).

  • -scol_separator
    Gibt das Spaltentrennzeichen an. Standardmäßig wird ein Leerzeichen verwendet. Um Zeichen verwenden zu können, die für das Betriebssystem eine besondere Bedeutung haben (z. B. | ; & < >), müssen Sie das Zeichen in doppelte Anführungszeichen (") setzen.

  • -wcolumn_width
    Ermöglicht dem Benutzer, die Bildschirmbreite für die Ausgabe festzulegen. Die Standardeinstellung ist 80 Zeichen. Wenn eine Ausgabezeile die maximale Bildschirmbreite erreicht hat, wird die Zeile umbrochen.

  • -apacket_size
    Ermöglicht es Ihnen, Pakete mit einer anderen Größe anzufordern. Gültige Werte für packet_size sind 512 bis 65535. Der Standardwert osql ist der Serverstandard. Ein höherer Wert für die Paketgröße kann das Leistungsverhalten beim Ausführen von größeren Skripts verbessern, die eine große Anzahl von SQL-Anweisungen zwischen GO-Befehlen aufweisen. Von Microsoft durchgeführte Tests zeigen an, dass 8192 in der Regel die schnellste Einstellung für Massenkopiervorgänge ist. Ein höherer Wert für die Paketgröße kann angefordert werden; osql verwendet jedoch standardmäßig den Standardwert des Servers, wenn der Anforderung nicht entsprochen werden kann.

  • -e
    Bewirkt, dass die Eingabe auf dem Bildschirm angezeigt wird.

  • -I
    Aktiviert die QUOTED_IDENTIFIER-Verbindungsoption.

  • -Ddata_source_name
    Stellt eine Verbindung mit einer ODBC-Datenquelle her, die so definiert ist, dass sie den ODBC-Treiber für SQL Server verwendet. Die osql-Verbindung verwendet die Optionen, die in der Datenquelle angegeben sind.

    HinweisHinweis

    Diese Option kann nicht mit Datenquellen verwendet werden, die für andere Treiber definiert sind.

  • -ccmd_end
    Gibt das Befehlsabschlusszeichen an. Standardmäßig werden Befehle abgeschlossen und an SQL Server gesendet, indem Sie GO in eine eigene Zeile eingeben. Wenn Sie das Befehlsabschlusszeichen neu festlegen, dürfen Sie keine für Transact-SQL reservierten Wörter oder Zeichen verwenden, die eine spezielle Bedeutung für das Betriebssystem haben, unabhängig davon, ob vor einem Wort bzw. Zeichen ein umgekehrter Schrägstrich steht.

  • -q "query"
    Führt eine Abfrage aus, wenn osql startet, beendet osql aber nicht, nachdem die Abfrage abgeschlossen ist. (Beachten Sie, dass die Abfrageanweisung keinen GO-Befehl enthalten darf.) Wenn Sie eine Abfrage aus einer Batchdatei ausgeben, können Sie Variablen (%Variable) oder Umgebungsvariablen (%Umgebungsvariable%) verwenden. Beispiel:

    SET table=sys.objects
    osql -E -q "select name, object_id from %table%"
    

    Schließen Sie die Abfrage in doppelte Anführungszeichen und alle Elemente, die in die Abfrage eingebettet sind, in einfache Anführungszeichen ein.

  • -Q"query"
    Führt eine Abfrage aus und beendet osql sofort. Schließen Sie die Abfrage in doppelte Anführungszeichen und alle Elemente, die in die Abfrage eingebettet sind, in einfache Anführungszeichen ein.

  • -n
    Entfernt die Nummerierung und das Symbol für die Eingabeaufforderung (>) aus den Eingabezeilen.

  • -merror_level
    Passt die Anzeige der Fehlermeldungen an. Für jeden Fehler mit dem angegebenen oder einem höheren Schweregrad wird die Meldungsnummer, der Status und der Fehlergrad angezeigt. Für Fehler mit einem niedrigeren ist als dem angegebenen Schweregrad wird nichts angezeigt. Mit -1 können Sie angeben, dass alle Header mit Meldungen zurückgegeben werden. Dies gilt auch für Informationsmeldungen. Wenn Sie -1 verwenden, darf kein Leerzeichen zwischen dem Parameter und der Einstellung stehen (d. h. -m-1 und nicht -m -1).

  • -r { 0| 1}
    Leitet die Meldungsausgabe auf den Bildschirm um (stderr). Wenn Sie keinen Parameter oder 0 angeben, werden nur Fehlermeldungen umgeleitet, deren Schweregrad 11 oder höher ist. Wenn Sie 1 angeben, werden alle Meldungsausgaben (einschließlich der Ausgabe von "print") umgeleitet.

  • -iinput_file
    Identifiziert die Datei, die einen Batch mit SQL-Anweisungen oder gespeicherten Prozeduren enthält. Anstelle von -i kann der Kleiner-als-Vergleichsoperator (<) verwendet werden.

  • -ooutput_file
    Identifiziert die Datei, in die die Ausgabe von osql geschrieben wird. Anstelle von -o kann das Größer-als-Zeichen (>) verwendet werden.

    Wenn input_file nicht im Unicode-Format vorliegt und -u nicht angegeben wird, wird die mit output_file angegebene Datei im OEM-Format gespeichert. Wenn input_file im Unicode-Format vorliegt oder -u angegeben wird, wird die mit output_file angegebene Datei im Unicode-Format gespeichert.

  • -p
    Druckt die Leistungsstatistik.

  • -b
    Gibt an, dass osql beendet und ein DOS ERRORLEVEL-Wert zurückgegeben wird, wenn ein Fehler auftritt. Für die DOS ERRORLEVEL-Variable wird der Wert 1 zurückgegeben, wenn der Schweregrad der SQL Server-Fehlermeldung 11 oder größer ist. Andernfalls wird der Wert 0 zurückgegeben. Mit Microsoft MS-DOS-Batchdateien kann der Wert von DOS ERRORLEVEL getestet und der Fehler entsprechend behandelt werden.

  • -u
    Gibt an, dass output_file unabhängig vom Format von input_file im Unicode-Format gespeichert wird.

  • -R
    Gibt an, dass der SQL Server-ODBC-Treiber Clienteinstellungen verwendet, wenn Währungs-, Datums- oder Zeitdaten in Zeichendaten konvertiert werden.

  • -O
    Gibt an, dass bestimmte osql-Funktionen deaktiviert werden, damit osql mit dem Verhalten früherer isql-Versionen übereinstimmt. Die folgenden Funktionen werden deaktiviert:

    • EOF-Batchverarbeitung

    • Automatisches Skalieren der Konsolenbreite

    • Ausführliche Meldungen

    Außerdem wird der Standardwert von DOS ERRORLEVEL auf -1 festgelegt.

HinweisHinweis

Die Optionen -n, -O und -D werden von osql nicht mehr unterstützt.

Hinweise

Das Dienstprogramm osql wird direkt von der Betriebssystemebene aus mit den hier aufgelisteten Optionen gestartet, wobei für die Optionen zwischen Groß- und Kleinschreibung unterschieden wird. Nachdem osqlgestartet wurde, akzeptiert das Dienstprogramm SQL-Anweisungen und sendet diese interaktiv an SQL Server. Die Ergebnisse werden formatiert und auf dem Bildschirm angezeigt (stdout). Verwenden Sie QUIT oder EXIT zum Beenden von osql.

Wenn Sie beim Starten von osql keinen Benutzernamen angeben, überprüft SQL Server die Umgebungsvariablen und verwendet die dort definierten Informationen, z. B. osqluser=(user) oder osqlserver=(server). Wenn keine Umgebungsvariablen festgelegt sind, wird der Benutzername der Arbeitsstation verwendet. Wenn Sie keinen Server angeben, wird der Name der Arbeitsstation verwendet.

Wenn weder die Option -U noch die Option -P verwendet wird, versucht SQL Server, die Verbindung mithilfe des Microsoft Windows-Authentifizierungsmodus herzustellen. Die Authentifizierung basiert auf dem Microsoft Windows-Konto des Benutzers, der das Dienstprogramm osql ausführt.

Das Dienstprogramm osql verwendet die ODBC-API. Das Dienstprogramm verwendet die Standardeinstellungen des SQL Server-ODBC-Treibers für die ISO-Verbindungsoptionen in SQL Server. Weitere Informationen finden Sie im Thema zu den Effekten der ANSI-Optionen.

HinweisHinweis

Das Dienstprogramm osql bietet keine Unterstützung für benutzerdefinierte CLR-Datentypen. Zum Verarbeiten dieser Datentypen müssen Sie das Dienstprogramm sqlcmd verwenden. Weitere Informationen finden Sie unter sqlcmd (Dienstprogramm).

OSQL-Befehle

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

Befehl

Beschreibung

GO

Führt alle Anweisungen aus, die nach dem letzten GO-Befehl eingegeben wurden.

RESET

Löscht alle Anweisungen, die Sie eingegeben haben.

QUIT oder EXIT( )

Beendet osql.

STRG+C

Beendet eine Abfrage, ohne osql zu beenden.

HinweisHinweis

Die Befehle !! und ED werden von osql nicht mehr unterstützt.

Die Befehlsabschlusszeichen GO (Standard), RESET, ED, !!, EXIT, QUIT und STRG+C werden nur erkannt, wenn sie am Anfang einer Zeile unmittelbar hinter der osql-Eingabeaufforderung verwendet werden.

GO signalisiert sowohl das Ende eines Batches als auch die Ausführung aller zwischengespeicherten Transact-SQL-Anweisungen. Sobald Sie am Ende einer Eingabezeile die EINGABETASTE drücken, werden die Anweisungen in dieser Zeile von osql zwischengespeichert. Wenn Sie nach dem Eingeben von GO die EINGABETASTE drücken, werden alle zurzeit zwischengespeicherten Anweisungen als Batch an SQL Server gesendet.

Die aktuelle Version von osql arbeitet so, als würde sich am Ende jedes ausgeführten Skripts ein impliziter GO-Befehl befinden. Daher werden alle Anweisungen im Skript ausgeführt.

Beenden Sie einen Befehl, indem Sie eine Zeile eingeben, die mit einem Befehlsabschlusszeichen beginnt. Durch das Eingeben einer ganzen Zahl hinter einem Befehlsabschlusszeichen können Sie angeben, wie oft der Befehl ausgeführt werden soll. Wenn Sie diesen Befehl z. B. 100-mal ausführen möchten, geben Sie Folgendes ein:

SELECT x = 1
GO 100

Die Ergebnisse werden einmal am Ende der Ausführung ausgegeben. osql akzeptiert maximal 1.000 Zeichen pro Zeile. Umfangreiche Anweisungen sollten auf mehrere Zeilen verteilt werden.

Mithilfe der Befehlsrückruffunktionen von Windows können osql-Anweisungen zurückgerufen und geändert werden. Der vorhandene Abfragepuffer kann durch das Eingeben von RESET geleert werden.

Wenn gespeicherte Prozeduren ausgeführt werden, gibt osql eine Leerzeile zwischen den einzelnen Resultsets in einem Batch aus. Außerdem wird die Meldung "0 Zeilen betroffen" nicht angezeigt, wenn sie für die ausgeführte Anweisung nicht gilt.

Interaktives Verwenden von osql

Wenn Sie osql interaktiv verwenden möchten, geben Sie an der Eingabeaufforderung den Befehl osql (und alle darüber hinaus gewünschten Optionen) ein.

Sie können eine Datei mit einer Abfrage (wie z. B. Stores.qry) einlesen, die von osql ausgeführt werden soll, indem Sie einen Befehl eingeben, der in etwa wie folgt aussieht:

osql -E -i stores.qry

Sie können eine Datei mit einer Abfrage (z. B. Titles.qry) einlesen und die Ergebnisse in eine andere Datei umleiten, indem Sie einen Befehl eingeben, der in etwa wie folgt aussieht:

osql -E -i titles.qry -o titles.res
SicherheitshinweisSicherheitshinweis

Verwenden Sie, sofern möglich, die Option -E(vertrauenswürdige Verbindung).

Wenn Sie osql interaktiv verwenden, können Sie mithilfe von :rfile_name eine Betriebssystemdatei in den Befehlspuffer einlesen. Hierdurch wird das in file_name angegebene SQL-Skript direkt als ein einziger Batch an den Server gesendet.

HinweisHinweis

Wenn Sie osql verwenden, behandelt SQL Server das Batchtrennzeichen "GO" als Syntaxfehler, falls es in einer SQL-Skriptdatei verwendet wird.

Einfügen von Kommentaren

Sie können Kommentare in eine Transact-SQL-Anweisung einschließen, die von osql an SQL Server gesendet wird. Für Kommentare sind die beiden folgenden Formate zulässig: -- und /*...*/.

Weitere Informationen finden Sie unter Verwenden von Kommentaren.

Verwenden von EXIT zum Zurückgeben von Ergebnissen in "osql"

Sie können das Ergebnis einer SELECT-Anweisung als Rückgabewert von osql verwenden. Die erste Spalte der ersten Ergebniszeile wird in eine 4 Byte lange ganze Zahl (Long) konvertiert. MS-DOS übergibt das niedrige Byte an den übergeordneten Prozess oder an die Fehlerebene des Betriebssystems. Windows übergibt die gesamte 4 Byte lange ganze Zahl. Die Syntax ist:

EXIT ( < query > )

Beispiel:

EXIT(SELECT @@ROWCOUNT)

Sie können den EXIT-Parameter auch als Teil einer Batchdatei einschließen. Beispiel:

osql -E -Q "EXIT(SELECT COUNT(*) FROM '%1')"

Das Dienstprogramm osql übergibt alle zwischen den Klammern () stehenden Zeichen exakt so an den Server, wie sie eingegeben wurden. Wenn eine gespeicherte Systemprozedur eine Menge auswählt und einen Wert zurückgibt, wird nur die Auswahl zurückgegeben. Eine EXIT**(** )-Anweisung ohne Angabe zwischen den Klammern führt alle im Batch vorhergehenden Anweisungen aus und beendet das Dienstprogramm dann ohne Rückgabewert.

Es gibt vier EXIT-Formate:

  • EXIT
HinweisHinweis

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

  • EXIT**(** )
HinweisHinweis

Führt den Batch aus, beendet dann das Dienstprogramm und gibt keinen Wert zurück.

  • EXIT**(query)**
HinweisHinweis

Führt den Batch einschließlich der Abfrage aus und beendet dann das Dienstprogramm, nachdem die Ergebnisse der Abfrage zurückgegeben wurden.

  • RAISERROR mit einem Status von 127
HinweisHinweis

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

RAISERROR(50001, 10, 127)

Dieser Fehler bewirkt, dass das osql-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; osql definiert die folgenden Werte:

  • -100

    Vor dem Auswählen des Rückgabewerts ist ein Fehler aufgetreten.

  • -101

    Beim Auswählen eines Rückgabewerts wurden keine Zeilen gefunden.

  • -102

    Beim Auswählen des Rückgabewerts ist ein Konvertierungsfehler aufgetreten.

Anzeigen der Datentypen money und smallmoney

osql zeigt einen Wert des Datentyps money oder smallmoney mit zwei Dezimalstellen an, obwohl SQL Server den Wert intern mit vier Dezimalstellen speichert. Beachten Sie folgendes Beispiel:

SELECT CAST(CAST(10.3496 AS money) AS decimal(6, 4))
GO

Diese Anweisung gibt als Ergebnis 10.3496 zurück. Dieses Ergebnis zeigt an, dass der Wert mit allen unveränderten Dezimalstellen gespeichert wird.