
A példához szükséges a FileDB adatbázis, melyet a mellékelt Run_script.cmd BATCH állomány lefuttatásával hozhatunk létre. Csak arra kell ügyelni, hogy a FileDB.sql parancsállomány a BATCH állománnyal azonos mappában legyen. A FileDB.sql parancsállomány 5. sorában adja meg helyesen a létrehozandó adatbázisfájlok mappájának nevét és elérési útvonalát.
A cikk mellékletét képező példaprogramban azokat az állományokat használjuk fel az adatok betöltésére, amelyeket a sorozat ezt megelőző számában generáltunk az egész táblás mentés folyamán. A program mappájában találjuk az adatokat tartalmazó publishers.dat állományt, valamint az adatok formátumát leíró publishers.fmt fájlt.
A feladat egyik részében a BCP.EXE alkalmazást használjuk fel az adatok betöltésére, a másik megoldásban pedig a BULK INSERT SQL utasítást.
A műveletek előtt meg kell adni annak a meghajtónak a betűjelét, ahová az MS SQL Server telepítve van. Erre egyrészt azért van szükség, hogy a programból indíthassuk el a segédprogramot, másrészt viszont, hogy megtaláljuk a betöltéshez felhasznált állományokat.
A feldolgozó ugyanis nem tudja értelmezni a könyvtárszerkezet mélyén található állományok elérési útvonalát, így nem használhatjuk az alkalmazás mappájának elérési útvonalát. Ezért úgy jártunk el, hogy a művelet indításakor a meghajtó gyökérmappájában létrehozunk egy /test nevű mappát, majd ide bemásoljuk a szükséges két állományt.
A bcp.exe felhasználásakor parancssori argumentumként adjuk át a szükséges paramétereket, akár csak az export műveletben. A műveletben a következő argumentumokkal futtatjuk le a segédprogramot:
bcp FileDB.dbo.Table1 in ’<meghajtó>:\test\publishers.dat’ –f ’ <meghajtó>:\test\publishers.fmt’
A parancssorban az IN kulcsszót használhatjuk az import művelet jelzésére. Az állományok neveit elérési útvonallal kell megadni. A formázó állomány nevét a –f kapcsoló után kell feltüntetni.
A másik megoldásban a BULK INSERT utasítást használjuk, melynek szabályos szintaxisa a következő:
BULK INSERT <[adatbázisnév].[tulajdonos].[táblanév]>
FROM <adatfájlnév>
WITH (...)
A FROM kulcsszó után adhatjuk meg a betöltendő adatállomány nevét aposztrófok közt. A WITH kulcsszó után adhatjuk meg az opcionálisan feltüntetendő, a betöltés módjára vonatkozó instrukciókat. Számtalan argumentumot használhatunk, lássunk néhányat:
- DATAFILETYPE: megadhatunk egy értéket a lehetséges négyből, melyekkel meghatározhatjuk az adatállomány típusát. Értékei: char (az állomány karakteres adatokat tartalmaz), nativ (az adatbázis natív formátumában megadott adatokat tartalmaz), widechar (az állomány Unicode karaktereket tartalmaz), a widenativ (az állomány natív formátumú, de a TEXT, CHAR, VARCHAR oszlopok értékei Unicode karaktereket is tartalmaznak).
- FIELDTERMINATOR: amennyiben nem használunk formázóállományt, itt adhatjuk meg, hogy az egyes mezők milyen karakterrel legyenek elválasztva. Ez csak char és widechar típusú állományok esetén használható.
- FIRE_TRIGGERS: megadható, hogy a művelet alatt a táblához kapcsolódó INSERT TRIGGER-ek lefuthatnak.
- FORMATFILE: itt adható meg a formázó állomány neve elérési útvonallal, aposztrófok közt.
- ROWTERMINATOR: amennyiben nem használunk formázóállományt, itt adhatjuk meg, hogy az egyes rekordok milyen karakterrel legyenek elválasztva. Ez csak char és widechar típusú állományok esetén használható.
A műveletben a következő SQL utasítást helyeztük el a SqlCommand komponens CommandText property-jében:
BULK INSERT FileDB.dbo.Table1
FROM '<meghajtó>:\test\publishers.dat'
WITH
(
FORMATFILE = ’ '<meghajtó>:\test\publishers.fmt’
)
A műveletek elvégzésekor egy szempontot kell figyelembe venni az adattáblákkal kapcsolatban. A táblának, melybe a betöltés megtörténik nem muszáj annak a táblának lenni, amiből az adatokat exportáltuk.
Azonban a beolvasás csak akkor lesz sikeres, ha a tábla annyi oszloppal rendelkezik, mint ahány adatoszlop az adatállományban fellelhető, és az oszlopok típusa megegyezik a betöltendő adatok megfelelő értékeinek típusával.
Ellenkező esetben a művelet hibaüzenettel leáll.