Sdílet prostřednictvím


osql Utility

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformní systém (PDW)

Nástroj osql umožňuje zadat Transact-SQL příkazy, systémové procedury a soubory skriptů. Tento nástroj používá rozhraní ODBC ke komunikaci se serverem.

Důležité

Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají. Místo toho použijte sqlcmd . Další informace naleznete v nástroji sqlcmd.

Syntaxe

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

Argumenty

-?

Zobrazí souhrn syntaxe přepínačů osql .

-L

Zobrazí seznam místně nakonfigurovaných serverů a názvů serverů, které v síti vysílají.

Poznámka:

Osql nemusí přijímat včasnou odpověď ze všech serverů v síti s Windows. Seznam vrácených serverů se může pro každé vyvolání této možnosti lišit.

-U login_id

Přihlašovací ID uživatele. V ID přihlášení se rozlišují malá a velká písmena.

-P heslo

Heslo zadané uživatelem. Pokud se -P tato možnost nepoužívá, osql zobrazí výzvu k zadání hesla. Pokud se -P tato možnost použije na konci příkazového řádku bez hesla, použije osql výchozí heslo (NULL).

Důležité

Nepoužívejte prázdné heslo. Použijte silné heslo. Další informace naleznete v tématu Silná hesla.

V heslech se rozlišují malá a velká písmena.

Proměnná OSQLPASSWORD prostředí umožňuje nastavit výchozí heslo pro aktuální relaci. Proto nemusíte pevně zakódovat heslo do dávkových souborů.

Pokud nezadáte heslo s -P možností, osql nejprve zkontroluje proměnnou OSQLPASSWORD . Pokud není nastavena žádná hodnota, osql použije výchozí heslo NULL. Následující příklad nastaví OSQLPASSWORD proměnnou na příkazovém řádku a pak přistupuje k nástroji osql :

SET OSQLPASSWORD=abracadabra
osql

Důležité

Pokud chcete heslo maskovat, nezadávejte možnost -P spolu s možností -U. Místo toho po zadání osql spolu s -U možností a dalšími přepínači (nezadávejte -P), stiskněte Enter a osql vás vyzve k zadání hesla. Tato metoda zajišťuje maskování hesla při jeho zadání.

-E

Místo vyžádání hesla používá důvěryhodné připojení.

-S server_name[\instance_name]

Určuje instanci SQL Serveru, ke které se má připojit. Zadejte server_name pro připojení k výchozí instanci SQL Serveru na tomto serveru. Zadejte <server_name>\<instance_name> , že se chcete připojit k pojmenované instanci SQL Serveru na tomto serveru. Pokud není zadaný žádný server, osql se připojí k výchozí instanci SQL Serveru na místním počítači. Tato možnost se vyžaduje při spouštění osql ze vzdáleného počítače v síti.

-H wksta_name

Název pracovní stanice. Název pracovní stanice je uložen v sysprocesses.hostname a je zobrazen pomocí sp_who. Pokud tato možnost není zadaná, předpokládá se název aktuálního počítače.

-d db_name

Vydá příkaz USE db_name při spuštění osql .

-l časový_limit

Určuje počet sekund před časovým limitem přihlášení osql . Výchozí časový limit pro připojení k osql je osm sekund.

-t časový_limit

Určuje počet sekund před časovým limitem příkazu. Pokud není zadaná hodnota časového limitu, příkazy nevyjdou vypršením časového limitu.

-h headers

Určuje počet řádků, které se mají vytisknout mezi záhlavími sloupců. Ve výchozím nastavení se nadpisy vytisknou jednou pro každou sadu výsledků dotazu. Slouží -1 k určení, že se nemají tisknout žádná záhlaví. Pokud -1 se použije, nesmí být mezi parametrem a nastavením mezera (-h-1nikoli -h -1).

-s oddělovač_sloupců

Určuje znak oddělovače sloupců, což je ve výchozím nastavení prázdné místo. Chcete-li použít znaky, které mají zvláštní význam pro operační systém (například | ; & <>), uzavřete znak do uvozovek (").

-w šířka_sloupce

Umožňuje uživateli nastavit šířku obrazovky pro výstup. Výchozí hodnota je 80 znaků. Když výstupní řádek dosáhne maximální šířky obrazovky, rozdělí se na několik řádků.

- a packet_size

Umožňuje požadovat paket s jinou velikostí. Platné hodnoty pro packet_size jsou 512 až 65535. Výchozí hodnota osql je výchozí hodnota serveru. Zvýšená velikost paketů může zvýšit výkon při provádění větších skriptů, kdy počet příkazů Transact-SQL mezi GO příkazy je podstatný. Testování Microsoftu znamená, že 8192 je obvykle nejrychlejším nastavením pro operace hromadného kopírování. Je možné vyžádat větší velikost paketů, ale pokud požadavek nemůže být splněn, osql se nastaví na výchozí nastavení serveru.

-e

Ozvěna vstupu.

-I

Nastaví možnost připojení QUOTED_IDENTIFIER jako zapnutou.

-D data_source_name

Připojí se ke zdroji dat ODBC, který je definovaný pomocí ovladače ODBC pro SQL Server. Připojení osql používá možnosti zadané ve zdroji dat.

Poznámka:

Tato možnost nefunguje se zdroji dat definovanými pro jiné ovladače.

-c cmd_end

Určuje ukončovací znak příkazu. Ve výchozím nastavení se příkazy ukončují a odesílají SQL Serveru zadáním na samostatný řádek GO. Při resetování oddělovače příkazů nepoužívejte rezervovaná slova nebo znaky jazyka Transact-SQL, které mají zvláštní význam pro operační systém, ať už předchází zpětné lomítko nebo ne.

-q "query"

Spustí dotaz při spuštění osql , ale po dokončení dotazu se neopustí osql . (Příkaz dotazu by neměl obsahovat GO). Pokud vydáte dotaz z dávkového souboru, použijte %<variable> nebo prostředí %<variable>%. Například:

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

Kolem dotazu použijte dvojité uvozovky a jednoduché uvozovky kolem všeho, co je v dotazu vložené.

-Q "dotaz"

Spustí dotaz a okamžitě ukončí osql. Kolem dotazu použijte dvojité uvozovky a jednoduché uvozovky kolem všeho, co je v dotazu vložené.

-n

Odebere číslování a symbol výzvy (>) ze vstupních řádků.

-m úroveň_chyby

Přizpůsobí zobrazení chybových zpráv. U chyb zadané úrovně závažnosti nebo vyšší se zobrazí číslo zprávy, stav a úroveň chyby. V případě chyb úrovní nižších než zadaná úroveň se nezobrazuje nic. Slouží -1 k určení, že se všechna záhlaví vrací se zprávami, a to i informačními zprávami. Při použití -1nesmí být mezi parametrem a nastavením mezera (-m-1nikoli -m -1).

-r { 0| 1}

Přesměruje výstup zprávy na obrazovku (stderr). Pokud nezadáte parametr nebo zadáte 0, přesměrují se pouze chybové zprávy s úrovní závažnosti 11 nebo vyšší. Pokud zadáte 1, přesměruje se veškerý výstup zprávy (včetně "tisku").

-i input_file

Identifikuje soubor, který obsahuje dávku příkazů SQL nebo uložených procedur. Operátor porovnání menší než (<) lze použít místo -i.

-o výstupní_soubor

Identifikuje soubor, který přijímá výstup z osql. Operátor porovnání větší než (>) lze použít místo -o.

Pokud input_file není Unicode a -u není zadaný, output_file se uloží ve formátu OEM. Pokud input_file je Unicode nebo -u je zadán, output_file je uložen ve formátu Unicode.

-p

Vytiskne statistiku výkonu.

-b

Určuje, že osql se ukončí a vrátí hodnotu DOS ERRORLEVEL , když dojde k chybě. Hodnota vrácená proměnné DOS ERRORLEVEL je 1, pokud chybová zpráva SQL Serveru má závažnost 11 nebo vyšší; jinak vrácená hodnota je 0. MS-DOS dávkové soubory mohou otestovat hodnotu DOSu ERRORLEVEL a zpracovat chybu vhodným způsobem.

-u

Určuje, že output_file je uložen ve formátu Unicode bez ohledu na formát input_file.

-R

Určuje, že ovladač ODBC systému SQL Server by měl používat nastavení klienta při převodu dat měny, data a času na data znaků.

-O

Určuje, že se některé funkce osql deaktivují tak, aby odpovídaly chování starších verzí isql. Tyto funkce jsou deaktivované:

  • Dávkové zpracování EOF
  • Automatické škálování šířky konzoly
  • Široké zprávy

Nastaví také výchozí hodnotu DOS ERRORLEVEL na hodnotu -1.

Poznámka:

Nastavení -n, -O a -D nejsou podporována osql.

Poznámky

Nástroj osql se spouští přímo z operačního systému s možnostmi citlivými na malá a velká písmena. Po spuštění osql přijme příkazy SQL a interaktivně je odešle na SQL Server. Výsledky jsou naformátované a zobrazené na obrazovce (stdout). Použijte QUIT nebo EXIT pro ukončení osql.

Pokud při spuštění osql nezadáte uživatelské jméno, SQL Server vyhledá proměnné prostředí a použije je, například osqluser=(<user>) nebo osqlserver=(<server>). Pokud nejsou nastaveny žádné proměnné prostředí, použije se uživatelské jméno pracovní stanice. Pokud nezadáte server, použije se název pracovní stanice.

Pokud se nepoužívá ani -U-P jeden z možností, SQL Server se pokusí připojit pomocí režimu ověřování systému Windows. Ověřování je založené na účtu systému Windows uživatele, na kterém běží osql.

Nástroj osql používá rozhraní ODBC API. Nástroj používá výchozí nastavení ovladače ODBC systému SQL Server pro možnosti připojení ISO systému SQL Server. Další informace naleznete v tématu Důležité informace při použití příkazů SET.

Poznámka:

Nástroj osql nepodporuje uživatelem definované datové typy CLR. Ke zpracování těchto datových typů je nutné použít nástroj sqlcmd . Další informace naleznete v nástroji sqlcmd.

Příkazy OSQL

Kromě příkazů Transact-SQL v osql jsou k dispozici také tyto příkazy.

Příkaz Popis
GO Spustí všechny řádky kódu zadané po posledním GO.
RESET Vymaže jakékoliv zadané prohlášení.
QUIT nebo EXIT() Ukončí osql.
Ctrl+C Ukončí dotaz bez ukončení osql.

Poznámka:

Osqlem nejsou podporovány příkazy !! a ED.

Ukončovací volby GO příkazů (ve výchozím nastavení), RESET, , EXITQUITa Ctrl+C jsou rozpoznány pouze v případě, že se zobrazí na začátku řádku bezprostředně za příkazovým řádkem osql.

GO signalizuje konec dávky i spuštění všech příkazů Transact-SQL uložených v mezipaměti. Když na konci každého vstupního řádku stisknete Enter , osql ukládá příkazy do mezipaměti na daném řádku. Když po zadání stisknete GO, všechny aktuálně uložené příkazy v mezipaměti se odešlou jako dávka na SQL Server.

Aktuální nástroj osql funguje tak, jako kdyby na konci jakéhokoli skriptu byl implicitně vložen příkaz GO, a proto se všechny příkazy ve skriptu skutečně provedou.

Ukončete příkaz zadáním řádku začínajícího ukončovacím příkazem. Můžete postupovat podle ukončovacího příkazu s celým číslem a určit, kolikrát se má příkaz spustit. Pokud chcete například spustit tento příkaz 100krát, zadejte:

SELECT x = 1
GO 100

Výsledky se vytisknou jednou na konci provádění. Osql nepřijímá více než 1 000 znaků na řádek. Velké příkazy by se měly rozprostřít na více řádků.

K vyvolání a úpravu příkazů osql můžete použít funkci vzpomínání příkazů ve Windows. Existující vyrovnávací paměť dotazu lze vymazat zadáním RESET.

Když osql spouští uložené procedury, vytiskne mezi každou sadou výsledků v dávce prázdný řádek. Zpráva "0 řádků ovlivněných" se navíc nezobrazí, pokud se nevztahuje na spuštěný příkaz.

Interaktivní použití osql

Pokud chcete použít osql interaktivně, zadejte příkaz osql (a kteroukoli z možností) na příkazovém řádku.

Soubor obsahující dotaz (například Stores.qry) můžete načíst pro spuštění zadáním příkazu podobného tomuto:

osql -E -i stores.qry

V souboru obsahujícím dotaz (například Titles.qry) můžete číst a výsledky směrovat do jiného souboru zadáním příkazu podobného tomuto:

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

Důležité

Pokud je to možné, použijte možnost -E (důvěryhodné připojení).

Pokud používáte osql interaktivně, můžete načíst soubor operačního systému do vyrovnávací paměti příkazů pomocí :r<file_name>. Tento příkaz odešle skript SQL v file_name přímo na server jako jednu dávku.

Poznámka:

Osql považuje oddělovač GO dávky za chybu syntaxe, pokud se zobrazí v souboru skriptu SQL.

Vložení komentářů

Komentáře můžete zahrnout do příkazu Transact-SQL odeslaného do SQL Serveru osql. Jsou povoleny dva typy stylů komentářů: -- a /*...*/.

Vrácení výsledků v osql pomocí příkazu exit

Výsledek SELECT příkazu můžete použít jako návratovou hodnotu z osql. Pokud je číselný, poslední sloupec posledního řádku výsledku se převede na 4 bajtové celé číslo (dlouhé). MS-DOS předává nízký bajt do nadřazeného procesu nebo úrovně chyb operačního systému. Windows předá celé čtyřbajtové celé číslo. Syntaxe je:

EXIT ( <query> )

Například:

EXIT(SELECT @@ROWCOUNT)

Parametr EXIT můžete zahrnout také jako součást dávkového souboru. Například:

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

Nástroj osql předává všechno mezi závorkami () na server přesně tak, jak bylo zadáno. Pokud uložená systémová procedura vybere sadu a vrátí hodnotu, vrátí se pouze výběr. Příkaz EXIT() bez závorek provede vše, co mu předchází v dávce, a pak se ukončí bez návratové hodnoty.

Existují čtyři EXIT formáty:

Formát Podrobnosti
EXIT Dávka se nespustí; je okamžitě ukončena a nevrátí žádnou hodnotu.
EXIT() Spustí dávkový proces, poté se ukončí a nevrátí žádnou hodnotu.
EXIT(<query>) Spustí dávku, která zahrnuje dotaz, a po vrácení výsledků se ukončí.
RAISERROR se stavem 127 Pokud RAISERROR se používá ve skriptu osql a je vyvolán stav 127, osql se ukončí a vrátí ID zprávy zpět klientovi.

Následující příklad ukazuje, jak ovlivnit chování osql s RAISERROR:

RAISERROR (50001, 10, 127);

Tato chyba způsobí ukončení skriptu osql a vrátí klientovi ID zprávy 50001.

Návratové hodnoty -1-99 jsou rezervované. osql definuje následující hodnoty:

  • -100: Došlo k chybě před výběrem návratové hodnoty.
  • -101: Při výběru návratové hodnoty nebyly nalezeny žádné řádky.
  • -102: Při výběru návratové hodnoty došlo k chybě převodu.

Zobrazení peněz a malých datových typů

Osql zobrazí datové typy money a smallmoney se dvěma desetinnými místy, i když SQL Server ukládá hodnotu interně se čtyřmi desetinnými místy. Podívejte se na příklad:

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

Tento příkaz vytvoří výsledek 10.3496, který označuje, že hodnota je uložena se všemi desetinnými místy beze změny.