Delen via


osql Utility

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Met het hulpprogramma osql kunt u Transact-SQL instructies, systeemprocedures en scriptbestanden invoeren. Dit hulpprogramma maakt gebruik van ODBC om te communiceren met de server.

Belangrijk

Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van de functie. Gebruik in plaats daarvan sqlcmd . Voor meer informatie, zie sqlcmd Utility.

Syntaxis

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 ]
]

Argumenten

-?

Geeft de syntaxissamenvatting weer van osql-switches .

-L

Een lijst met de lokaal geconfigureerde servers en de namen van de servers die op het netwerk worden uitgezonden.

Opmerking

osql ontvangt mogelijk geen tijdige reactie van alle servers in een Windows-netwerk. De lijst met geretourneerde servers kan variëren voor elke aanroep van deze optie.

- U-login_id

De aanmeldings-id van de gebruiker. Aanmeldings-id's zijn hoofdlettergevoelig.

-P wachtwoord

Een door de gebruiker opgegeven wachtwoord. Als de -P optie niet wordt gebruikt, vraagt osql om een wachtwoord. Als de -P optie wordt gebruikt aan het einde van de opdrachtprompt zonder een wachtwoord, gebruikt osql het standaardwachtwoord (NULL).

Belangrijk

Gebruik geen leeg wachtwoord. Gebruik een sterk wachtwoord. Zie Sterke wachtwoorden voor meer informatie.

Wachtwoorden zijn hoofdlettergevoelig.

Met de OSQLPASSWORD omgevingsvariabele kunt u een standaardwachtwoord instellen voor de huidige sessie. Daarom hoeft u geen wachtwoord in batchbestanden vast te codeeren.

Als u geen wachtwoord opgeeft met de -P optie, controleert osql eerst op de OSQLPASSWORD variabele. Als er geen waarde is ingesteld, gebruikt osql het standaardwachtwoord. NULL In het volgende voorbeeld wordt de OSQLPASSWORD variabele ingesteld bij een opdrachtprompt en wordt vervolgens het osql-hulpprogramma geopend:

SET OSQLPASSWORD=abracadabra
osql

Belangrijk

Als u uw wachtwoord wilt maskeren, geeft u de optie -P niet op, samen met de optie -U. Druk in plaats daarvan na het opgeven van osql samen met de -U optie en andere schakelopties (niet opgeven -P), op Enter en osql vraagt u om een wachtwoord. Deze methode zorgt ervoor dat uw wachtwoord wordt gemaskeerd wanneer het wordt ingevoerd.

-E

Gebruikt een vertrouwde verbinding in plaats van een wachtwoord te vragen.

-S server_name[\instance_name]

Hiermee specificeert u het exemplaar van SQL Server waarmee u verbinding maakt. Geef server_name op om verbinding te maken met het standaardexemplaren van SQL Server op die server. Geef <server_name>\<instance_name> op om verbinding te maken met een benoemd exemplaar van SQL Server op die server. Als er geen server is opgegeven, maakt osql verbinding met het standaardexemplaren van SQL Server op de lokale computer. Deze optie is vereist bij het uitvoeren van osql vanaf een externe computer in het netwerk.

-H wksta_name

De naam van een werkstation. De naam van het werkstation wordt opgeslagen in sysprocesses.hostname en wordt weergegeven door sp_who. Als deze optie niet is opgegeven, wordt de naam van de huidige computer aangenomen.

-d db_name

Een USE db_name-statement wordt uitgevoerd bij het starten van osql.

-l time_out

Hiermee geeft u het aantal seconden op voordat er een time-out optreedt voor een osql-aanmelding . De standaardtime-out voor het maken van verbinding met osql is acht seconden.

-t time_out

Hiermee geeft u het aantal seconden op voordat een time-out optreedt voor een opdracht. Als er geen time-outwaarde is opgegeven, treedt er geen time-out op voor opdrachten.

-h kopteksten

Hiermee geeft u het aantal rijen op dat moet worden afgedrukt tussen kolomkoppen. De standaardinstelling is om koppen één keer af te drukken voor elke set queryresultaten. Gebruik -1 dit om op te geven dat er geen kopteksten moeten worden afgedrukt. Als -1 wordt gebruikt, mag er geen spatie zijn tussen de parameter en de instelling (-h-1 niet -h -1).

-s col_separator

Hiermee geeft u het scheidingsteken voor kolommen op. Dit is standaard een lege spatie. Als u tekens wilt gebruiken die een speciale betekenis hebben voor het besturingssysteem (bijvoorbeeld | ; & <>), plaatst u het teken tussen dubbele aanhalingstekens (").

-w column_width

Hiermee kan de gebruiker de schermbreedte voor uitvoer instellen. De standaardwaarde is 80 tekens. Wanneer een uitvoerlijn de maximale schermbreedte bereikt, wordt deze onderverdeeld in meerdere lijnen.

-een packet_size

Hiermee kunt u een pakket met een andere grootte aanvragen. De geldige waarden voor packet_size zijn 512 tot en met 65535. De standaardwaarde osql is de standaardserver. Grotere pakketgrootte kan de prestaties verbeteren bij grotere uitvoering van scripts, waarbij het aantal Transact-SQL instructies tussen GO opdrachten aanzienlijk is. Microsoft-tests geven aan dat 8192 doorgaans de snelste instelling is voor bulkkopiebewerkingen. Er kan een grotere pakketgrootte worden aangevraagd, maar osql wordt standaard ingesteld op de server als de aanvraag niet kan worden verleend.

-e

Herhaalt invoer.

-I

Hiermee stelt u de QUOTED_IDENTIFIER verbindingsoptie in.

-D data_source_name

Maakt verbinding met een ODBC-gegevensbron die is gedefinieerd met behulp van het ODBC-stuurprogramma voor SQL Server. De osql-verbinding maakt gebruik van de opties die zijn opgegeven in de gegevensbron.

Opmerking

Deze optie werkt niet met gegevensbronnen die zijn gedefinieerd voor andere stuurprogramma's.

-c cmd_end

Hiermee wordt het opdrachteindteken gespecificeerd. Standaard worden opdrachten beëindigd en naar SQL Server verzonden door zelf een regel in te voeren GO . Wanneer u het opdrachteindteken opnieuw instelt, gebruikt u niet Transact-SQL gereserveerde woorden of tekens die speciale betekenis hebben voor het besturingssysteem, ongeacht of deze worden voorafgegaan door een backslash of niet.

-q "query"

Hiermee wordt een query uitgevoerd wanneer osql wordt gestart, maar osql niet wordt afgesloten wanneer de query is voltooid. (De query-verklaring mag GO niet bevatten.) Als u een query vanuit een batchbestand uitvoert, gebruik %<variable>, of omgevingsvariabelen %<variable>%. Voorbeeld:

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

Gebruik dubbele aanhalingstekens rond de query en enkele aanhalingstekens rond alles wat in de query is ingesloten.

-Q" query "

Een query wordt uitgevoerd en osql wordt onmiddellijk afgesloten. Gebruik dubbele aanhalingstekens rond de query en enkele aanhalingstekens rond alles wat in de query is ingesloten.

-n

Hiermee verwijdert u nummering en het promptsymbool (>) uit invoerregels.

-m error_level

Hiermee past u de weergave van foutberichten aan. Het berichtnummer, de status en het foutniveau worden weergegeven voor fouten van het opgegeven ernstniveau of hoger. Er wordt niets weergegeven voor fouten van niveaus lager dan het opgegeven niveau. Gebruik -1 dit om op te geven dat alle kopteksten worden geretourneerd met berichten, zelfs informatieve berichten. Als u dit gebruikt -1, mag er geen spatie zijn tussen de parameter en de instelling (-m-1niet -m -1).

-r { 0| 1}

Hiermee wordt de berichtuitvoer omgeleid naar het scherm (stderr). Als u geen parameter opgeeft of als u opgeeft 0, worden alleen foutberichten met ernstniveau 11 of hoger omgeleid. Als u 1 opgeeft, wordt alle berichtuitvoer (inclusief "printen") omgeleid.

-i input_file

Identificeert het bestand dat een batch SQL-instructies of opgeslagen procedures bevat. De vergelijkingsoperator kleiner dan (<) kan worden gebruikt in plaats van -i.

-o uitvoerbestand

Identificeert het bestand dat uitvoer van osql ontvangt. De vergelijkingsoperator groter dan (>) kan worden gebruikt in plaats van -o.

Als input_file geen Unicode is en -u niet is opgegeven, wordt output_file opgeslagen in OEM-indeling. Als input_file Unicode is of als -u is opgegeven, wordt output_file opgeslagen in Unicode-formaat.

-p

Hiermee worden prestatiestatistieken afgedrukt.

-b

Hiermee specificeert u dat osql afsluit en een DOS-waarde ERRORLEVEL retourneert wanneer er een fout optreedt. De waarde die wordt geretourneerd aan de DOS-variabele ERRORLEVEL is 1 wanneer het SQL Server-foutbericht de ernst 11 of hoger heeft. Anders is de geretourneerde waarde 0. MS-DOS batchbestanden kunnen de waarde van DOS ERRORLEVEL testen en de fout op de juiste manier afhandelen.

-u

Hiermee geeft u op dat output_file is opgeslagen in Unicode-indeling, ongeacht de indeling van de input_file.

-R

Hiermee geeft u op dat het ODBC-stuurprogramma van SQL Server clientinstellingen moet gebruiken bij het converteren van valuta-, datum- en tijdgegevens naar tekengegevens.

-O

Hiermee geeft u op dat bepaalde osql-functies worden gedeactiveerd zodat deze overeenkomen met het gedrag van eerdere versies van isql. Deze functies worden gedeactiveerd:

  • EOF-batchverwerking
  • Automatisch schalen van de consolebreedte
  • Brede berichten

Ook wordt de standaard DOS-waarde ERRORLEVEL ingesteld op -1.

Opmerking

De -n, -Oen -D opties worden niet ondersteund door osql.

Opmerkingen

Het osql-hulpprogramma wordt rechtstreeks vanuit het besturingssysteem gestart met de hier vermelde hoofdlettergevoelige opties. Nadat osql is gestart, accepteert het SQL-instructies en verzendt deze interactief naar SQL Server. De resultaten worden opgemaakt en weergegeven op het scherm (stdout). Gebruik QUIT of EXIT om af te sluiten van osql.

Als u geen gebruikersnaam opgeeft wanneer u osql start, controleert SQL Server op de omgevingsvariabelen en gebruikt die, bijvoorbeeld osqluser=(<user>) of osqlserver=(<server>). Als er geen omgevingsvariabelen zijn ingesteld, wordt de gebruikersnaam van het werkstation gebruikt. Als u geen server opgeeft, wordt de naam van het werkstation gebruikt.

Als geen van de opties -U of -P wordt gebruikt, probeert SQL Server verbinding te maken met de Windows-verificatiemodus. Verificatie is gebaseerd op het Windows-account van de gebruiker die osql uitvoert.

Het osql-hulpprogramma maakt gebruik van de ODBC-API. Het hulpprogramma maakt gebruik van de standaardinstellingen voor het ODBC-stuurprogramma van SQL Server voor de ISO-verbindingsopties van SQL Server. Zie Overwegingen wanneer u de SET-instructies gebruikt voor meer informatie.

Opmerking

Het osql-hulpprogramma biedt geen ondersteuning voor door de gebruiker gedefinieerde CLR-gegevenstypen. Als u deze gegevenstypen wilt verwerken, moet u het hulpprogramma sqlcmd gebruiken. Voor meer informatie, zie sqlcmd Utility.

OSQL-opdrachten

Naast Transact-SQL instructies in osql zijn deze opdrachten ook beschikbaar.

Opdracht Beschrijving
GO Voert alle instructies uit die zijn ingevoerd na de laatste GO.
RESET Alle opgegeven instructies worden gewist.
QUIT of EXIT() Sluit af van osql.
Ctrl+C Hiermee beëindigt u een query zonder osql af te sluiten.

Opmerking

De !! en ED opdrachten worden niet ondersteund door osql.

De opdrachteindtekens GO (standaard), RESET, EXIT, en QUITCtrl+C worden alleen herkend als ze aan het begin van een regel worden weergegeven, direct na de osql-prompt.

GO geeft zowel het einde van een batch aan als de uitvoering van eventuele Transact-SQL-instructies in de cache. Wanneer u aan het einde van elke invoerregel op Enter drukt, worden de statements op die regel door osql in de cache opgeslagen. Wanneer u op Enter drukt nadat u hebt getypt GO, worden alle momenteel in de cache opgeslagen instructies verzonden als een batch naar SQL Server.

Het huidige osql-hulpprogramma werkt alsof aan het einde van elk script automatisch een GO wordt toegevoegd, zodat alle instructies in het script worden uitgevoerd.

Een opdracht beëindigen door een regel te typen die begint met een opdrachteindteken. U kunt het opdrachteindteken volgen met een geheel getal om op te geven hoe vaak de opdracht moet worden uitgevoerd. Als u deze opdracht bijvoorbeeld 100 keer wilt uitvoeren, typt u:

SELECT x = 1
GO 100

De resultaten worden eenmaal aan het einde van de uitvoering afgedrukt. osql accepteert niet meer dan 1000 tekens per regel. Grote instructies moeten over meerdere lijnen worden verdeeld.

U kunt de opdracht terugroepfaciliteiten in Windows gebruiken om osql-instructies te intrekken en te wijzigen. De bestaande querybuffer kan worden gewist door te typen RESET.

Wanneer osql opgeslagen procedures uitvoert, wordt er een lege regel tussen elke set resultaten in een batch afgedrukt. Bovendien wordt het bericht '0 rijen beïnvloed' niet weergegeven wanneer dit niet van toepassing is op de uitgevoerde instructie.

Osql interactief gebruiken

Als u osql interactief wilt gebruiken, typt u de osql-opdracht (en een van de opties) bij een opdrachtprompt.

U kunt in een bestand met een query (zoals Stores.qry) lezen voor uitvoering door osql door een opdracht te typen die er ongeveer als volgt uit ziet:

osql -E -i stores.qry

U kunt in een bestand met een query (zoals Titles.qry) lezen en de resultaten doorsturen naar een ander bestand door een opdracht te typen die er ongeveer als volgt uit ziet:

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

Belangrijk

Gebruik indien mogelijk de optie -E (vertrouwde verbinding).

Wanneer u osql interactief gebruikt, kunt u een besturingssysteembestand lezen in de opdrachtbuffer met :r<file_name>. Hiermee wordt het SQL-script in file_name rechtstreeks als één batch naar de server verzonden.

Opmerking

osql behandelt het batchscheidingsteken GO als een syntaxisfout als deze wordt weergegeven in een SQL-scriptbestand.

Opmerkingen invoegen

U kunt opmerkingen opnemen in een Transact-SQL instructie die door osql naar SQL Server is verzonden. Er zijn twee typen opmerkingenstijlen toegestaan: -- en /*...*/.

De opdracht 'exit' gebruiken om resultaten in osql te retourneren

U kunt het resultaat van een SELECT instructie gebruiken als de retourwaarde van osql. Als deze numeriek is, wordt de laatste kolom van de laatste resultaatrij geconverteerd naar een geheel getal van vier bytes (lang). MS-DOS zendt de lage byte naar het ouderproces of het foutniveau van het besturingssysteem. Windows geeft het gehele 4-byte-geheel getal door. De structuur is als volgt:

EXIT ( <query> )

Voorbeeld:

EXIT(SELECT @@ROWCOUNT)

U kunt ook de parameter EXIT opnemen als onderdeel van een batchbestand. Voorbeeld:

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

Het osql-hulpprogramma geeft alles tussen de haakjes () door aan de server zoals ingevoerd. Als een opgeslagen systeemprocedure een set selecteert en een waarde retourneert, wordt alleen de selectie geretourneerd. Met EXIT() de instructie met niets tussen de haakjes wordt alles uitgevoerd dat eraan voorafgaat in de batch en wordt vervolgens afgesloten zonder retourwaarde.

Er zijn vier EXIT indelingen:

Formaat Bijzonderheden
EXIT Voert de batch niet uit; wordt onmiddellijk afgesloten en retourneert geen waarde.
EXIT() Voert de batch uit en beëindigt en geeft geen waarde terug.
EXIT(<query>) Voert de batch uit, inclusief de query, en sluit vervolgens af nadat de resultaten van de query zijn geretourneerd.
RAISERROR met een status van 127 Als RAISERROR wordt gebruikt binnen een osql-script en een status van 127 wordt opgeworpen, beëindigt osql de uitvoering en retourneert het de message ID naar de client.

In het volgende voorbeeld ziet u hoe u het gedrag van osql kunt beïnvloeden met RAISERROR:

RAISERROR (50001, 10, 127);

Deze fout zorgt ervoor dat het osql-script wordt beëindigd en retourneert bericht-id 50001 aan de client.

De geretourneerde waarden -1-99 zijn gereserveerd. osql definieert de volgende waarden:

  • -100: Er is een fout opgetreden voordat de retourwaarde werd geselecteerd.
  • -101: Er zijn geen rijen gevonden bij het selecteren van een retourwaarde.
  • -102: Er is een conversiefout opgetreden bij het selecteren van de retourwaarde.

Geld- en smallmoney-gegevenstypen weergeven

osql geeft de gegevenstypen geld en smallmoney weer met twee decimalen, hoewel SQL Server de waarde intern opslaat met vier decimalen. Bekijk het voorbeeld:

SELECT CAST (CAST (10.3496 AS MONEY) AS DECIMAL (6, 4));
GO

Deze instructie produceert een resultaat van 10.3496, wat aangeeft dat de waarde wordt opgeslagen met alle decimalen intact.