Teilen über


osql (Hilfsprogramm)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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

osql empfängt möglicherweise keine zeitnahe Antwort von allen Servern in einem Windows-Netzwerk. Die Liste der zurückgegebenen Server kann für jeden Aufruf dieser Option variieren.

-U login_id

Die Benutzeranmeldungs-ID. Bei Anmelde-IDs wird die Groß- und Kleinschreibung beachtet.

- P-Kennwort

Dies ist ein von den Benutzer*innen angegebenes Kennwort. Wenn die -P Option nicht verwendet wird, fordert osql ein Kennwort ein. Wenn die -P Option am Ende der Eingabeaufforderung ohne Kennwort verwendet wird, verwendet osql das Standardkennwort (NULL).

Wichtig

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.

Mit der OSQLPASSWORD Umgebungsvariable können Sie ein Standardkennwort für die aktuelle Sitzung festlegen. Daher müssen Sie kein Kennwort in Batchdateien codieren.

Wenn Sie kein Kennwort mit der -P Option angeben, sucht osql zuerst nach der OSQLPASSWORD Variablen. Wenn kein Wert festgelegt ist, verwendet osql das Standardkennwort. NULL Im folgenden Beispiel wird die OSQLPASSWORD Variable an einer Eingabeaufforderung festgelegt und dann auf das osql-Hilfsprogramm zugegriffen:

SET OSQLPASSWORD=abracadabra
osql

Wichtig

Zum Maskieren des Kennworts sollten Sie die Option -P nicht in Verbindung mit der Option -U verwenden. Nachdem Sie osql zusammen mit der -U Option und anderen Schaltern angegeben haben (nicht angeben -P), drücken Sie die EINGABETASTE, und osql fordert Sie zur Eingabe eines Kennworts auf. 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, dass eine Verbindung mit einer benannten Instanz von SQL Server auf diesem Server hergestellt werden soll. 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. Der Arbeitsstationsname wird in sysprocesses.hostname gespeichert und durch sp_who angezeigt. Wenn diese Option nicht angegeben ist, wird der name des aktuellen Computers angenommen.

-d db_name

Gibt eine USE db_name-Anweisung aus, wenn osql gestartet wird.

-l time_out

Gibt die Anzahl der Sekunden an, nach denen ein Timeout für die osql-Anmeldung erfolgt. Das Standardtimeout für die Verbindung mit osql beträgt acht Sekunden.

-t time_out

Gibt die Anzahl von Sekunden an, bevor ein Befehl abbricht. Wenn kein Timeoutwert angegeben ist, wird der Befehl nicht abgebrochen.

- h-Kopfzeilen

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. Wird -1 verwendet, um anzugeben, dass keine Kopfzeilen gedruckt werden sollen. Wenn -1 verwendet wird, darf kein Leerraum zwischen dem Parameter und der Einstellung vorhanden sein (-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 Ausgabelinie die maximale Bildschirmbreite erreicht, wird sie in mehrere Zeilen unterteilt.

-a packet_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. Eine erhöhte Paketgröße kann die Leistung bei der Ausführung größerer Skripts verbessern, wobei die Anzahl der Transact-SQL Anweisungen zwischen GO Befehlen erheblich 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, aber osql verwendet standardmäßig die Servervorgabeeinstellungen, 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 funktioniert nicht mit Datenquellen, die für andere Treiber definiert sind.

-c cmd_end

Gibt das Befehlsabschlusszeichen an. Standardmäßig werden Befehle beendet und an SQL Server gesendet, indem GO in eine eigene Zeile eingegeben wird. Wenn Sie den Befehlsterminator zurücksetzen, verwenden Sie nicht die Transact-SQL reservierten Wörter oder Zeichen, die eine besondere Bedeutung für das Betriebssystem haben, unabhängig davon, ob ihnen ein umgekehrter Schrägstrich vorangestellt ist.

-q "Abfrage"

Führt eine Abfrage aus, wenn osql gestartet wird, beendet osql jedoch nicht, wenn die Abfrage abgeschlossen ist. (Die Abfrage sollte GO nicht enthalten.) Wenn Sie eine Abfrage aus einer Batchdatei ausstellen, verwenden Sie %<variable> oder die Umgebung %<variable>%. 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" -Abfrage "

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 error_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. Verwenden Sie -1, um anzugeben, dass alle Kopfzeilen mit den Nachrichten, sogar mit Informationsnachrichten, zurückgegeben werden. Bei Verwendung -1darf kein Leerraum zwischen dem Parameter und der Einstellung vorhanden sein (-m-1und nicht -m -1).

-r { 0| 1}

Leitet die Nachrichtenausgabe an den Bildschirm (stderr) um. Wenn Sie keinen Parameter angeben oder angeben 0, werden nur Fehlermeldungen mit schweregrad 11 oder höher umgeleitet. Wenn Sie angeben 1, wird alle Nachrichtenausgabe (einschließlich "print") umgeleitet.

-i input_file

Identifiziert die Datei, die einen Batch mit SQL-Anweisungen oder gespeicherten Prozeduren enthält. Der Vergleichsoperator "kleiner als" (<) kann anstelle von -i verwendet werden.

-o Ausgabedatei

Identifiziert die Datei, die die Ausgabe von osqlerhält. Der Vergleichsoperator "größer als" (>) kann anstelle von -o verwendet werden.

Wenn input_file nicht Unicode ist und -u nicht angegeben ist, wird output_file im OEM-Format gespeichert. Wenn input_file Unicode ist oder -u angegeben ist, wird output_file im Unicode-Format gespeichert.

-p

Druckt die Leistungsstatistik.

-b

Gibt an, dass osql beendet und einen DOS-Wert ERRORLEVEL zurückgibt, wenn ein Fehler auftritt. Der an die DOS-Variable ERRORLEVEL zurückgegebene Wert ist 1, wenn die SQL Server-Fehlermeldung einen Schweregrad von 11 oder höher aufweist. Andernfalls ist der zurückgegebene Wert 0. 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 beim Konvertieren von Währungs-, Datums- und Uhrzeitdaten in Zeichendaten verwenden soll.

-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 Standard-DOS-Wert ERRORLEVEL auf -1.

Hinweis

Die -nOptionen -Ound -D Optionen werden von osql nicht 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 osql gestartet wurde, akzeptiert sie SQL-Anweisungen und sendet sie interaktiv an SQL Server. Die Ergebnisse werden formatiert und auf dem Bildschirm angezeigt (stdout). Verwenden Sie QUIT oder EXIT, um osql zu beenden.

Wenn Sie beim Starten von osql keinen 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.

Wenn weder die Option -U noch die Option -P verwendet wird, versucht SQL Server, eine Verbindung im Windows-Authentifizierungsmodus herzustellen. Die Authentifizierung basiert auf dem Windows-Konto des Benutzers, der osql ausfü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 unter Überlegungen zur Verwendung der SET-Anweisungen.

Hinweis

Das osql-Hilfsprogramm unterstützt keine benutzerdefinierten 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 GOeingegeben 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 Befehle werden von osql nicht unterstützt.

Die Befehlsterminatoren GO (standardmäßig), RESET, , EXIT, QUITund STRG+C werden nur erkannt, wenn sie am Anfang einer Zeile angezeigt werden, unmittelbar nach der osql-Eingabeaufforderung .

GO signalisiert sowohl das Ende eines Batches als auch die Ausführung aller zwischengespeicherten Transact-SQL-Anweisungen. Wenn Sie am Ende jeder Eingabezeile die EINGABETASTE drücken, speichert osql die Anweisungen in dieser Zeile zwischen. Wenn Sie nach der Eingabe die GO drücken, werden alle aktuell zwischengespeicherten Anweisungen als Batch an SQL Server gesendet.

Das aktuelle osql-Hilfsprogramm funktioniert so, als ob am Ende eines ausgeführten Skripts ein impliziertes GO Vorhanden ist, 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.

Sie können die Befehlsrückrufeinrichtungen in Windows verwenden, um osql-Anweisungen zurückzurufen und zu ändern. Der vorhandene Abfragepuffer kann durch Eingabe RESETgelöscht werden.

Wenn osql gespeicherte Prozeduren ausführt, wird eine leere Zeile zwischen den einzelnen Ergebnisgruppen in einem Batch gedruckt. Darüber hinaus wird die Meldung "0 Zeilen betroffen" nicht angezeigt, wenn sie nicht auf die ausgeführte Anweisung angewendet wird.

Interaktive Verwendung 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 nach Möglichkeit die Option -E (vertrauenswürdige Verbindung).

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

Hinweis

osql behandelt das Batchtrennzeichen GO als Syntaxfehler, wenn es in einer SQL-Skriptdatei angezeigt 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 osql verwenden. Wenn sie numerisch ist, wird die letzte Spalte der letzten Ergebniszeile in eine 4-Byte-Ganzzahl (lang) 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 osql-Hilfsprogramm übergibt alles zwischen den Klammern () an den Server genau wie eingegeben. Wenn eine gespeicherte Systemprozedur eine Menge auswählt und einen Wert zurückgibt, wird nur die Auswahl zurückgegeben. Die EXIT() Anweisung ohne Wert zwischen den Klammern führt alles aus, was der Anweisung im Batch vorausgeht, und beendet dann ohne Rückgabewert.

Es gibt vier EXIT Formate:

Format Einzelheiten
EXIT Führt den Batch nicht aus. beendet sofort und gibt keinen Wert zurück.
EXIT() Führt den Batch aus, beendet dann das Hilfsprogramm und gibt keinen Wert zurück.
EXIT(<query>) 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 Wenn RAISERROR in einem osql-Skript verwendet wird und ein Status 127 ausgelöst wird, beendet osql die Ausführung und gibt die Nachrichten-ID an den Client zurück.

Das folgende Beispiel veranschaulicht, wie das Verhalten von osql mit RAISERROR beeinflusst werden kann.

RAISERROR (50001, 10, 127);

Dieser Fehler bewirkt, dass das osql-Skript beendet wird und die Nachrichten-ID 50001 an den Client zurückgibt.

Die Rückgabewerte -1 bis -99 sind reserviert. osql definiert die folgenden Werte:

  • -100: Fehler beim Auswählen des Rückgabewerts.
  • -101: Beim Auswählen des Rückgabewerts wurden keine Zeilen gefunden.
  • -102: Konvertierungsfehler beim Auswählen des Rückgabewerts.

Anzeigen von Geld- und Kleingeld-Datentypen

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.3496zurück. Dieses Ergebnis zeigt an, dass der Wert mit allen unveränderten Dezimalstellen gespeichert wird.