osql (Hilfsprogramm)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Das Hilfsprogramm osql ermöglicht es Ihnen, TransactSQL -Anweisungen, Systemprozeduren und Skriptdateien einzugeben. Dieses Hilfsprogramm verwendet ODBC, um Daten mit dem Server auszutauschen.
Wichtig
Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. 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.
-U login_id
Die Benutzeranmelde-ID. Bei Anmelde-IDs wird die Groß- und Kleinschreibung beachtet.
-P Kennwort
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.
-S server_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 der benannten Instanz von SQL-Server auf diesem Server herzustellen. Falls kein Server angegeben ist, 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.
-H wksta_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.
-d Datenbankname
Gibt die USE db_name -Anweisung aus, wenn osqlgestartet wird.
-l time_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.
-t time_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.
-h headers
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).
-s col_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.
-w Spaltenbreite
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.
-a Paketgröße
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 geben an, 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.
-D data_source_name
Stellt eine Verbindung mit einer ODBC-Datenquelle her, die so definiert ist, dass sie den ODBC-Treiber für SQL Serververwendet. 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.
-c cmd_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 TransactSQL 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 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 Symbol für die Eingabeaufforderung (>) aus den Eingabezeilen.
-m Fehlerebene
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 { 0| 1}
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.
-i input_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.
-o Ausgabedatei
Identifiziert die Datei, die die Ausgabe von osqlerhält. Anstelle von > -o kann der Größer-als-Vergleichsoperator ( ) 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. 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. Microsoft MS-DOS-Batchdateien können verwendet werden, um den Wert von DOS ERRORLEVEL zu testen und den Fehler entsprechend zu 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- oder Zeitdaten 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. Nachdem osqlgestartet wurde, akzeptiert das Hilfsprogramm 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.
Falls Sie beim Starten von osqlkeinen Benutzernamen angeben, überprüft SQL Server die 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.
Falls 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 osqlausführt.
Das Hilfsprogramm osql verwendet die ODBC-API. Das Hilfsprogramm 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.
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 den TransactSQL -Anweisungen in osql, sind auch die folgenden Befehle 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 dem Eingeben von GO die EINGABETASTE drücken, werden alle zurzeit zwischengespeicherten Anweisungen als Batch an SQL Servergesendet.
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 mithilfe von :rfile_nameeine Betriebssystemdatei in den Befehlspuffer einlesen. Hierdurch wird das in file_name angegebene SQL-Skript direkt als ein einziger Batch an den Server gesendet.
Hinweis
Wenn Sie osqlverwenden, 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 SQL Server osql angesendet wird. 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. Eine EXIT**()**-Anweisung ohne Angabe zwischen den Klammern führt alle im Batch vorhergehenden Anweisungen aus und beendet das Hilfsprogramm dann ohne Rückgabewert.
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 sind von SQL Serverreserviert; 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.
Weitere Informationen
Kommentar (MDX)
-- (Kommentar) (MDX)
CAST und CONVERT (Transact-SQL)
RAISERROR (Transact-SQL)