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álassza 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 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 programot a Process osztály Start metódusával indítjuk el. 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