Viszonylag gyakori művelete az adatbázis-adminisztrációnak az adatok export, illetve import művelete. A MS SQL Server BCP.EXE nevű parancssori eszközével nagy mennyiségű adatot lehet az adatbázis tábláiból egy ASCII állományba menteni, vagy onnan visszatölteni. A program alapértelmezésben a <SQL Server mappa>\80\Tools\Binn mappában található, indításkor parancssori argumentumok formájában adhatjuk át a mentés, vagy betöltés paramétereit.
A program felhasználásával van lehetőségünk arra, hogy egy egész táblát kimentsünk, vagy egy lekérdezést fogalmazzunk meg, és ebben specifikáljuk a mentendő adatok körét. Mai cikkünkben a mentéssel foglalkozunk.
Rengeteg kapcsolót használhatunk, mi csak a leggyakrabban használtakkal foglalkozunk. Szintaxis:
bcp <adatbázisnév>.<táblanév | nézetnév | lekérdezés> [in | out | queryout] <adatfájl neve> <kapcsolók>
Amennyiben a tábla teljes adatállományát mentjük, akkor elegendő az első argumentumban megadni a tábla teljes nevét, másodikként az OUT kulcsszót, majd az adatfájl nevét elérési úttal.
Lekérdezést is megadhatunk aposztrófok között, ekkor ezt a tábla neve helyett kell megtennünk, majd a QUERYOUT kulcsszóval jelezni, hogy szelektív adatmentés következik.
A legjellemzőbb kapcsolók:
- -P: egy jelszó megadása az adatbázis eléréséhez.
- -t: megadható, hogy az állományban az egyes mezőket milyen karakter válassza el egymástól. Pl. a \t (tab) karakter.
- -r: az egyes rekordokat milyen karakter válassza el egymástól. Pl. a \n (új sor) karakter.
- A szöveges állomány mellett generálódik egy, a formátumot tartalmazó fájl.
- Minden futáskor interaktív módon meg kell adni bizonyos információkat a program számára.
- A program természetesen alapértelmezett adatokat is használhat, ha azt szeretnénk.
- Az állomány a következő oszlopokat tartalmazza:
- Bal sarokban látható a bcp.exe alkalmazás verziószáma és az oszlopszám (8.0).
- 1. oszlop: mezősorrend.
- 2. oszlop: adattípusok.
- 3. oszlop: prefixum hossza.
- 4. oszlop: oszlop adathossza.
- 5. oszlop: mezőhatároló karakter.
- 6. oszlop: oszlopsorrend.
- 7. oszlop: oszlopnév.
- 8. oszlop: nyelvi beállítások.
Az interaktív mentéskor négy kérdésre kell válaszolnunk. Ezek mind ismétlődnek oszloponként, mivel oszloponként van lehetőségünk megadni, hogy milyen formátumban, és feltételekkel akarjuk tárolni az adatokat. A kérdések a következők:
- Milyen típusban kívánjuk tárolni az oszlop adatait (karakteres, natív)?
- Mekkora legyen a prefix oszlop mérete (3. oszlop)?
- Mekkora legyen egy-egy oszlop szélessége, melyben az adatokat tároljuk (egy számot kell megadnunk)?
- Az oszlopokat milyen karakter válasza el egymástól (a –t kapcsolóval jeleztük, hogy egy TAB karakter, így ez a kérdés kihagyható)?
Az egyes kérdéseknél az Enter leütésével fogadható el az alapértelmezett érték, így ha minden feltétel megfelel – márpedig az alapértelmezett értékek általában megfelelnek –, akkor csak Enter-eket kell ütnünk.
A művelet utolsó kérdése, hogy kívánjuk-e menteni a formázási információkat egy állományba. Az alapértelmezett beállítás YES. Utolsó kérdés a formázó állomány nevére utal, ha nem változtatunk, akkor bcp.fmt néven generálódik a példa mappájába.
Példa
A mellékelt példában a Form mezőit kitöltve a MŰVELET gombra kell kattintanunk a mentés indításához. Meg kell adnunk, hogy milyen meghajtóra installáltuk a MS SQL Server programunkat, hogy meg tudjuk a BCP-t keresni programból. Amennyiben kijelöltük a jelölőnégyzetet, akkor elérhetővé válik egy szerkesztődoboz egy helyes SQL utasítás megadásához.
A BCP.EXE alkalmazást a CreateProcess metódussal indítjuk el, a megfelelő parancssori argumentumokat átadva neki.
A generált szöveges állomány a megadott meghajtó gyökérmappájába kerül. A programban a pubs adatbázis publishers táblájának adatain végezhetünk el mentési műveleteket.
Egy lehetséges végrehajtandó utasítás a következőképpen nézhet ki:
bcp pubs.dbo.publishers out C:\test\publishers.txt –t \t –r \n –P sample
Abban az esetben, ha egy SQL utasítást specifikáltunk, a következő argumentumokkal futhat a BCP.EXE program:
bcp "SELECT pub_id, pub_name FROM pubs.dbo.publishers" queryout C:\test\publishers.txt -t \t –r \n –P sample