Pro spouštění SQL dotazů na SQL serveru většinou používáme Query Analyzer. Při dávkovém zpracování dat nebo tam, kde Query Analyzer chybí, je vhodné použití řádkové utility osql. Ta komunikuje s SQL serverem z příkazové řádky pomocí ODBC konektoru a je určena pro spouštění transakčních SQL dotazů, uložených procedur a souborů s SQL skripty.

Podobnou utilitou jako osql je také isql, která však komunikuje s SQL serverem přes DB-Library, v důsledku čehož zvládá pouze funkce implementované již do SQL serveru verze 6.5.

Obecná syntaxe příkazu osql je:

osql [-?] | [-L] | [ { {-U login_id [-P password]} | -E } [-S server_name[\instance_name]] [-H wksta_name]
[-d db_name] [-l time_out] [-t time_out] [-h headers] [-s col_separator] [-w column_width] [-a packet_size] [-e] [-I] [-D data_source_name] [-c cmd_end] [-q „query“] [-Q „query“] [-n] [-m error_level] [-r {0 | 1}] [-i input_file] [-o output_file] [-p] [-b] [-u] [-R] [-O] ]

Jednotlivé přepínače mají následující význam:

-?
Zobrazí syntaktickou nápovědu k přepínačům.

-L
Zobrazí lokální SQL servery a jejich názvy, pod nimiž jsou přístupné v síti.

-U login_id
Login, pod nímž se hlásíte do SQL serveru (case sensitive).

-P password
Heslo do SQL serveru k příslušnému loginu. Pokud nechcete, aby přístupové heslo bylo v dávkovém souboru explicitně viditelné, můžete použít proměnnou OSQLPASSWORD. Ta uchovává heslo pro dané session:

C:\>SET OSQLPASSWORD=heslo

Pokud program osql použijete bez přepínače -P, zkontroluje se nejprve hodota proměnné OSQLPASSWORD. Pokud tato proměnná nemá přiřazenu hodnotu, použije se NULL.

-E
Při připojení k SQL serveru se použije trusted connection namísto explicitního jména a hesla.

-S server_name[\instance_name]
Udává název serveru (a případně jeho pojmenované instance), k němuž se má osql připojit. Pokud je tento přepínač vynechán, osql se připojí k SQL serveru na lokálním počítači.

-H wksta_name
Název stanice. Tento název je uložen v tabulce sysprocesses v poli hostname (databáze master). Tabulku lze zobrazit uloženou procedurou sp_who.

-d db_name
Specifikuje název databáze, která bude po startu osql používána jako předdefinovaná. Obdoba příkazu USE db_name

-l time_out
Time out (v sekundách) pro připojení k serveru. Předdefinováno je 8 sekund.

-t time_out
Time out (v sekundách) pro provádění SQL příkazů. Implicitně není nastavena žádná hodnota.

-h headers
Udává, kolik řádek má být vytištěno mezi hlavičkami sloupců a daty. Pokud se nemá tisknout hlavička vůbec, použijte přepínač takto: -h-1 (bez mezery za přepínačem)

-s col_separator
Udává oddělovač polí. Speciální znaky musejí být uzavřeny v uvozovkách.

-w column_width
Nastavení šířky výstupu – v počtu znaků. Předdefinováno je 80 znaků. Pokud některý řádek výpisu přesáhne stanovenou šířku, bude zalomen.

-a packet_size
Nastavení velikosti paketu při komunikaci – mezi 512 a 65535. Předdefinovaná hodnota se bere ze serveru. Vyšší hodnota může zvýšit rychlost běhu delších skriptů.

-e
Zajistí, že na výstupu budou zobrazeny i všechny SQL příkazy předané do SQL serveru.

-I
Nastaví QUOTED_IDENTIFIER ON.

-D data_source_name
Definuje použití konkrétního DSN pro připojení via ODBC k SQL serveru. Pro připojení jsou pak použita nastavení zadefinovaného DSN.

-c cmd_end
Definuje oddělovač SQL příkazů. Implicitně se používá GO.

-q „query“
Spustí uvedený SQL příkaz, ale neukončí program osql, když je tento příkaz proveden. V dávkových souborech je možné použít systémové proměnné.

Např.:
SET table = moje_tabulka
osql -q „Select * from %table%“

-Q „query“
Stejný význam jako -q s tím rozdílem, že po provedení SQL příkazu se ukončí i program osql.

-n
Při zápisu SQL příkazů se nebude objevovat číslování řádek.

-m error_level
Udává úroveň chyb. Od této úrovně výš se budou chybová hlášení zobrazovat. Pokud chcete zobrazovat všechna hlášení, použijte -m-1 (bez mezery).

-r {0 | 1}
Přesměrování zpráv na screen. 1 znamená přesměrování všech zpráv.

-i input_file
Definuje dávkový soubor (včetně cesty) s SQL příkazy, které se mají provést. Přepínač může být nahrazen znakem < (menší než).

-o output_file
Definuje výstupní soubor (včetně cesty). Přepínač může být nahrazen znakem > (větší než).

-p
Vypíše se statistika provádění příkazů.

-b
Definuje, že po chybě při provádění SQL příkazů se má osql ukončit s tím, že se vrátí chyba DOSu (DOS ERRORLEVEL). Takovou chybu lze odchytit v dávkovém souboru.

-u
Udává, že výstupní soubor má být v Unicodu.

-R
Definuje, aby ODBC driver používal lokální nastavení při konverzi datových typů currency, datetime na textová data.

-O
Tento přepínač degraduje program osql na funkčnost isql (viz začátek článku)

Nejprve si ukážeme jednoduchý příklad interaktivní práce s programem osql. Jako výchozí databázi lokálního serveru určíme „pubs“ a pro logování využijeme trusted connection.

c:\>osql -E -d pubs

Nyní se objeví řádkový prompt programu osql, do něhož lze psát transakční SQL dotazy. Pokusme se vypsat tabulku jobs a počet jejích záznamů:

1>select * from jobs
2>select count(*) from jobs
3>go

SQL příkaz se nespustí po jeho zapsání stiskem klávesy Enter. Tímto způsobem lze zapsat sadu příkazů, které budou spuštěny až příkazem GO, který musí být uveden na začátku řádku. Příkaz GO může mít i číselný parametr, který udává, kolikrát se má celá transakce provést – např.: go 3. Pokud je číselný parametr vynechán, transakce se spustí jednou.

Kromě příkazu GO lze použít i jiné příkazy: Reset vymaže všechny vložené SQL příkazy, aniž by byly spuštěny.
Command lze použít pro spuštění příkazu operačního systému.
Quit ukončí práci v osql (můžete využít i klávesovou zkratku CTRL+C).
Exit([query]) spustí SQL query a potom ukončí prácí v osql. Pokud je parametr query vynechán, chová se příkaz jako postupná sekvence příkazů GO a QUIT.
ED spustí editor pro zadávání SQL příkazů.

SQL dotaz lze zapsat i rovnou jako parametr příkazu osql. Následující příklady jsou zcela ekvivalentní. Oba vypíší obsah tabulky jobs a ukončí program osql.

osql -U sa -P -d pubs -q“exit(select * from jobs)“
osql -U sa -P -d pubs -Q“select * from jobs“

Pokud budete chtít výpis tabulky zapsat nikoli na monitor (standardní výstup), ale do souboru out.txt, použijte jeden z následujících ekvivalentních zápisů:

osql -U sa -P -d pubs -Q“select * from jobs“ >out.txt
osql -U sa -P -d pubs -Q“select * from jobs“ -o out.txt

Jakkoli může být interaktivní práce v osql zajímavá, její hlavní využití bude pravděpodobně ve spouštění dávek zapsaných v samostatných souborech. Název souboru a cesta k němu musí být zapsána v parametru -i (přepínač -i může být nahrazen znakem „<") programu osql. Jako příklad dávkového zpracování uvedeme výpis tabulky jobs do souboru out.txt, pokud tato tabulka obsahuje nejvýše 100 záznamů. Nejprve vytvořte textový soubor priklad.sql:

use pubs
declare @x int
declare @z int
set @z=(select count(*) from jobs)
set @x=100 /*Maximální počet položek*/
if (@z)<=@x
begin
select * from jobs
end
else
PRINT ‚Prilis mnoho polozek‘

Obsah souboru budete předávat do SQL serveru utilitou osql. Za tím účelem vytvořte dávkový (.BAT) soubor, který bude obsahovat jediný řádek:

osql -U sa -P heslo -n

out.txt

Pokud nechcete vypisovat přístupové heslo do SQL serveru, můžete použít proměnnou OSQLPASSWORD (viz výše). Pokud chcete v dávce spouštět uloženou proceduru, musí být její název umístěn za klíčové slovo EXEC – soubor priklad.sql můžete obohatit např. o řádek:

EXEC sp_updatestats

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět