Windows - Az osql parancssori eszköz

Lehetőségünk van arra, hogy T-SQL parancsokat, rendszer tárolt eljárásokat adjunk ki az SQL szervernek közvetlenül parancssori eszközből vagy script-ből. A megvalósítást az osql eszköz végzi. Cikkünkben bemutatjuk az osql lehetőségeit.
Az osql eszköz segítségével T-SQL parancsokat, rendszer eljárásokat, script-eket futtathatunk. Az eszköz ODBC-n keresztül kommunikál a szerverrel.
Szintaxis
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]]
Paraméterek
  • -? – Az osql szintaxis leírását jeleníti meg.
  • -L – Listázza a helyben konfigurált szervereket.
  • -U login_azonosító – A felhasználó belépési azonosítója.
  • -P jelszó – Felhasználó által megadott jelszó. Ha nem adjuk meg, akkor az osql külön bekéri. Az OSQLPASSWORD környezeti változó lehetővé teszi az aktuális viszonyhoz alapértelmezett jelszó megadását. Az alábbi példa beállítja az OSQLPASSWORD változót parancssorból, és utána meghívja az osql eszközt.:
C:\>SET OSQLPASSWORD=jelszo
C:\>osql 
  • -E – Megbízott kapcsolatot használ jelszókérés helyett.
  • -S szerver_név[\példány_név] – Az opció elhagyásával az osql a helyi gép alapértelmezett SQL szerver 2000 példányához kapcsolódik.
  • -H munkaállomás_név – A munkaállomás neve a sysprocesses.hostname-ben tárolódik és az sp_who segítségével megjeleníthető. Ha az opció nincs beállítva, akkor az aktuális gépnevet használja az eszköz.
  • -d db_név – Egy USE db_név parancs futtatása az osql indításakor.
  • -l time_out – Megadja másodpercben az osql kapcsolat timeout idejét. Alapértelmezésben nyolc másodperc.
  • -t time_out – Megadja, hogy egy parancsnak mennyi a timeout értéke. Ha nem definiálunk itt értéket, akkor végtelen lesz a parancs timeout idő.
  • -h fejlécek – Megadja a sorok számát két fejlécsor között. Alapértelmezésben csak egyszer ír ki fejlécsort. Ha -1 értéket adunk meg, akkor fejléc nélküli eredményt kapunk. Ez utóbbi paraméternél nem lehet space karakter a –h és a -1 között, tehát így használjuk: -h-1.
  • -s mezőelválasztó – Megadja a mezőelválasztó karaktert, amely eredetileg egy üres karakter. Ha speciális karaktert adunk meg, (mint pl.: | ; & < >), akkor használjunk macskakörmöt.
  • -w oszlopszélesség – A felhasználó számára oszlopszélesség megadását teszi lehetővé. Az alapértelmezés 80 karakter.
  • -a csomagméret – Lehetővé teszi, hogy különböző méretű csomagokat kérjünk. Ez az érték 512-től 65535-ig terjedhet. Alapértelmezésben a szerver beállított értékét használja. Megnövelt csomagméret teljesítményjavító hatású lehet a nagyobb script-ek futtatásánál, ahol a GO parancsok közötti SQL parancsok mennyisége jelentős. A Microsoft szerint bulk copy műveleteknél a 8192-es méret a leggyorsabb megoldás.
  • -e – Visszaadja a beírt input-ot.
  • -I – Beállítja a QUOTED_IDENTIFIER kapcsolat opciót.
  • -D adatforrás_név – Kapcsolódik egy ODBC adatforráshoz, amely az SQL szerver ODBC meghajtójával definiált. Az osql kapcsolat az adatforrásban definiált opciókat használja.
  • -c cmd_end – Megad egy parancslezárót. Alapértelmezésben a parancsok lezárulnak, és az SQL szerverhez kerülnek a GO parancs beírásával. Amikor újra beállítjuk a parancslezárót, ne használjunk T-SQL foglalt szavakat, karaktereket.
  • -q "lekérdezés" – Futtat egy lekérdezést, amikor az osql indul, de nem lép ki az osql-ből, amikor a lekérdezés befejeződött. (A lekérdezés nem tartalmazhat GO parancsot.) Ha egy lekérdezést batch fájlból indítunk, használjuk a %változókat, vagy a környezeti %változókat%. Például:
SET table = sysobjects
osql /q "Select * from %table%"
Használjunk macskakörmöt a lekérdezés megadására és idézőjelet lekérdezésbe ágyazottan, ha szükséges.
  • -Q "lekérdezés" – Futtat egy lekérdezést, és azonnal kilép az osql-ből.
  • -n – Törli a számozást és a prompt szimbólumot (>) a bemeneti sorokból.
  • -m hibaszint – Testre szabja a hibaüzenetek megjelenését. Az üzenet száma, állapota és a hiba szintje megjelenik a megadott szigorúságú szinten vagy afölött. Nem jelenik meg a megadott szint alatti hibaüzenetekből semmi. Használjuk a -1-et, hogy minden fejléc visszajöjjön üzenetekkel. Ebben az esetben sem lehet a –m és -1 között space karakter. Lásd.: -m-1
  • -r {0 | 1} – Továbbítja az üzenet kimenetét a képernyőre (stderr). Ha nem adunk meg paramétert, vagy ha 0-t adunk meg, akkor csak a 17-es vagy magasabb hibaszintek kerülnek átirányításra. Ha 1-et adunk meg, minden üzenet kimenet (a "print"-et beleszámítva) átirányításra kerül.
  • -i input_file – Megad egy batch fájlt, amely SQL utasításokat vagy tárolt eljárásokat tartalmaz. A kisebb jel (<) használható a –i helyett.
  • -o output_file – Megadhatjuk, hogy mely fájl fogadja az osql kimenetét. A nagyobb jel (>) használható a –o helyett.
Ha a bemeneti állomány nem Unicode és a –u paraméter nem lett megadva, akkor a kimeneti fájl OEM formátumban tárolódik. Ha a bemeneti állomány Unicode, vagy a –u megadott, akkor a kimeneti állomány Unicode lesz.
  • -p – Teljesítmény-statisztikát jelenít meg.
  • -b – Beállítja, hogy az osql kilép és visszaad egy DOS ERRORLEVEL értéket, amikor hiba történik. A visszaadott DOS ERRORLEVEL változó 1, amikor az SQL szerver hibaüzenetnek 10-es, vagy magasabb szigorúsága van; ellenkező esetben a visszaadott érték 0.
  • -u – Megadja, hogy a kimeneti fájl Unicode formátumú legyen.
  • -R – Meghatározza, hogy az SQL szerver ODBC meghajtója a kliens beállításait használja, amikor pénz-, dátum- és időadatokat karakteres adatra konvertál.
  • -O – Meghatározza, hogy bizonyos osql tulajdonságok használata kimaradjon, hogy a környezet megfeleljen a korábbi isql verzióknak. A következő funkciók kapcsolhatók ki:
  • EOF (fájlvége) batch feldolgozás
  • Automatikus konzolméret beállítás
  • Széles méretű üzenetek
Ez egyben a DOS ERRORLEVEL értéket -1-re állítja.
OSQL parancsok
A T-SQL parancsokon felül az alábbi parancsokat tudjuk használni osql-ből:
Parancs Leírás
GO Futtat minden parancsot, amelyet a legutóbbi GO óta adtunk meg.
RESET Törli a beírt parancsokat.
ED Meghívja a szerkesztőt.
!! parancs Operációsrendszer parancs futtatása.
QUIT vagy EXIT() Kilép az osql-ből.
CTRL+C Leállít egy lekérdezést az osql-ből való kilépés nélkül.
Amikor egy parancs után Enter-t ütünk le, az osql tárolja a parancsot, de ha csak GO parancsot adunk, akkor futtatja.
Lehetőségünk van egy parancsot többször is futtatni. Az alábbi példa 10-szer fut le:
SELECT x = 1
GO 10
A felhasználó meghívhat egy szerkesztő programot az aktuális lekérdezés puffer-en az ED parancs segítségével. A szerkesztő az EDITOR környezeti változóban definiálható. Az alapértelmezett szerkesztő az "edit". Megadhatunk egyéb szerkesztőt, amint a példa is illusztrálja:
SET EDITOR=notepad
Az Exit() használata
Egy lekérdezés eredményét használhatjuk az osql visszatérési értékeként. Az első sor első oszlopa 4 bájtos integer értékké konvertálódik, és átadásra kerül. MS-DOS esetén az első alacsony bájt, Windows NT-től felfelé pedig az egész 4 bájt.
EXIT(SELECT Count(*) FROM table)
Az exit paraméter egy batch fájl paramétere is lehet:
osql /Q "EXIT(SELECT COUNT(*) FROM '%1')"