osql (Hilfsprogramm)

Gilt für:yes SQL Server (alle unterstützten Versionen) YesAzure SQL-Datenbank YesAzure SQL verwaltete Instanz yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

Mit dem Hilfsprogramm osql können Sie Transact-SQL, System prozeduren und Skriptdateien eingeben. Dieses Hilfsprogramm verwendet ODBC, um Daten mit dem Server auszutauschen.

Wichtig

Dieses Feature wird in einer zukünftigen Version von SQL Server. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen sie aktuell verwendet wird. Verwenden Sie stattdessen sqlcmd . Weitere Informationen finden Sie unter sqlcmd Utility.

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.

Hinweis

Aufgrund der Übertragungsart in Netzwerken, ist es möglich, dass osql nicht zeitnah von allen Servern eine Antwort erhält. 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 die Groß- und Kleinschreibung beachtet.

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

Wichtig

Verwenden Sie kein leeres Kennwort. Verwenden Sie ein sicheres Kennwort. Weitere Informationen finden Sie unter Strong Passwords.

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.

Falls 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 greift dann auf das Hilfsprogramm osql zu:

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

Wichtig

Zum Maskieren des Kennworts sollten Sie die Option -P nicht in Verbindung mit der Option -U angeben. Drücken Sie stattdessen nach der Angabe von osql mit der Option -U und anderen Schaltern (geben Sie -Pnicht an) die EINGABETASTE. Sie werden daraufhin von osql zur Eingabe eines Kennworts aufgefordert. Durch diese Methode wird 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 werden soll. Geben server_name an, um eine Verbindung mit der Standardinstanz von SQL Server server herzustellen. Geben server_nameinstance_name, um eine Verbindung mit einer benannten Instanz von SQL Server server herzustellen. Wenn kein Server angegeben ist, stellt osql eine Verbindung mit der Standardinstanz von SQL Server auf dem lokalen Computer herstellen. 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_whoangezeigt. 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 bei einer osql -Anmeldung ist acht Sekunden.

-ttime_out
Gibt an, nach wie vielen Sekunden ein 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. Falls -1 verwendet wird, darf zwischen dem Parameter und der Einstellung kein Leerzeichen stehen ( -h-1und nicht -h -1).

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

-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. Die gestiegene Paketgröße kann die Ausführung größerer Skripts verbessern, bei denen zwischen den GO-Befehlen eine erhebliche Menge an SQL-Anweisungen vorhanden ist. Microsoft-Tests deuten darauf hin, dass 8192 in der Regel die schnellste Einstellung für Massenkopiervorgänge ist. Eine größere Paketgröße kann angefordert werden; osql verwendet jedoch standardmäßig den Standardwert des Servers, wenn die Anforderung nicht gewährt 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 herstellen, die mithilfe des ODBC-Treibers für SQL Server. Die osql -Verbindung verwendet die Optionen, die in der Datenquelle angegeben sind.

Hinweis

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 beendet und an SQL Server, indem Sie GO in einer Zeile selbst eingeben. Wenn Sie das Befehlsabschlusszeichen zurücksetzen, sollten Sie keine reservierten Transact-SQL-Wörter oder Zeichen verwenden, die eine besondere Bedeutung für das Betriebssystem haben, unabhängig davon, ob ein zurückgesetzter Schrägstrich vorangegangen ist oder nicht.

-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 osqlsofort. 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 Eingabeaufforderungssymbol (>) 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. Falls Sie -1verwenden, darf kein Leerzeichen zwischen dem Parameter und der Einstellung stehen ( -m-1und nicht -m -1).

-r { 01}
Leitet die Meldungsausgabe auf den Bildschirm um (stderr). Wenn Sie keinen Parameter oder 0angeben, werden nur Fehlermeldungen umgeleitet, deren Schweregrad 11 oder höher ist. Wenn Sie 1angeben, 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 < ) verwendet werden.

-ooutput_file
Identifiziert die Datei, die die Ausgabe von osqlerhält. Anstelle von > -o > ) verwendet werden.

Falls input_file nicht im Unicode-Format vorliegt und -u nicht angegeben ist, wird output_file im OEM-Format gespeichert. Falls input_file im Unicode-Format vorliegt oder -u angegeben ist, wird output_file 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. Der an die DOS ERRORLEVEL-Variable zurückgegebene Wert ist 1, wenn die SQL Server-Fehlermeldung einen Schweregrad von 11 oder höher hat. Andernfalls ist der zurückgegebene Wert 0. Microsoft MS-DOS-Batchdateien können den Wert von DOS ERRORLEVEL testen und den Fehler entsprechend behandeln.

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

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

-O
Gibt an, dass bestimmte osql -Funktionen deaktiviert werden, um eine Übereinstimmung mit dem Verhalten früherer isql-Versionen zu erzielen. 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.

Hinweis

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

Bemerkungen

Das Hilfsprogramm osql wird direkt vom Betriebssystem aus mit den hier aufgelisteten Optionen gestartet, wobei bei den Optionen zwischen Groß- und Kleinschreibung unterschieden wird. Nach dem Start von osqlstarts akzeptiert es SQL-Anweisungen und sendet sie SQL Server An benutzeraktiv. 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, sucht SQL Server nach den Umgebungsvariablen und verwendet diese, 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 Optionen -U noch -P verwendet werden, versucht SQL Server, eine Verbindung mithilfe des Microsoft Windows-Authentifizierungsmodus herzustellen. Die Authentifizierung basiert auf dem Microsoft Windows-Konto des Benutzers, der osql ausgeführt.

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

Hinweis

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

OSQL-Befehle

Zusätzlich zu Transact-SQL-Anweisungen in osql sind diese Befehle auch verfügbar.

Get-Help 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 osqlzu beenden.

Hinweis

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

Die Befehlsabschlusszeichen GO (Standard), RESET 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 der Eingabe von GO die EINGABETASTE drücken, werden alle derzeit zwischengespeicherten Anweisungen als Batch an die SQL Server.

Die aktuelle Version des Hilfsprogramms 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 nicht mehr als 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 einlesen, die eine Abfrage enthält (wie z.B. „Stores.qry“), die von osql ausgeführt werden soll, indem Sie in etwa folgenden Befehl eingeben:

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  

Wichtig

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

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

Hinweis

Bei Verwendung von osql behandelt SQL Server Batchtrennzeichen GO als Syntaxfehler, wenn es in SQL Skriptdatei angezeigt wird.

Einfügen von Kommentaren

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

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

Sie können das Ergebnis einer SELECT-Anweisung als Rückgabewert von osqlverwenden. Wenn numerisch, wird die letzte Spalte der letzten Ergebniszeile 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 Hilfsprogramm 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. Die EXIT**()**-Anweisung mit nichts zwischen den Klammern führt alle vorangehenden Befehle im Batch aus und wird dann ohne Rückgabewert beendet.

Es gibt vier EXIT-Formate:

  • EXIT

Hinweis

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

  • EXIT**()**

Hinweis

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

  • EXIT**(query)**

Hinweis

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

  • RAISERROR mit einem Status von 127

Hinweis

Falls RAISERROR in einem osql -Skript verwendet wird, und der Status 127 ausgelöst wird, wird osql beendet und gibt die Meldungs-ID an den Client zurück. 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 werden von SQL Server reserviert. osql definiert diese 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 die Datentypen money und 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.3496zurück. Dieses Ergebnis zeigt an, dass der Wert mit allen unveränderten Dezimalstellen gespeichert wird.

Weitere Informationen

Kommentar (MDX)
-- (Kommentar) (MDX)
CAST und CONVERT (Transact-SQL)
RAISERROR (Transact-SQL)