
A mellékelt projekt használatához szükséges a BulkDB adatbázis, melyet a mellékelt Run.cmd BATCH állomány lefuttatásával hozhatunk létre. Csak arra kell ügyelni, hogy a BulkDB.sql parancsállomány a BATCH állománnyal azonos mappában legyen. A BulkDB.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 MS SQL Server BULK műveletei eredetileg arra szolgálnak, hogy az állományokban található, speciális formátumban megadott adathalmazokat egy adatbázis tetszőleges táblájába töltsék.
A BULK INSERT utasítás felhasználását is erre a tulajdonságra alapozzuk, vagyis megadunk egy állománynevet, melyben egy SQL utasítást tárolunk, és annak eredményhalmazát tetszőleges formában felhasználhatjuk.
A BULK INSERT művelet szintaxisa a következőképpen fest:
BULK INSERT
[adatbázis neve.tulajdonos.] <táblanév>
FROM <állomány neve>
A szintaxis egyszerűsített változat, hiszen most csak egy utasítást tartalmazó állományt olvasunk be, és nem pedig egy adathalmazt. A művelet érdekessége, hogy nem használható úgy, hogy a fájl elérési útvonalát egy tárolt eljárás paramétereként adjuk meg.
Minden esetben egy karakterlánc-konstanst kell átadnunk a FROM kulcsszó után.
A mellékelt példában egy nyomógombot találunk, melyre kattintva lefuttathatunk egy BULK INSERT műveletet úgy, hogy a projekt mappájában található sample.sql állomány elérési útvonalát adjuk át paraméterként. Az állományban a következő SQL utasítást találjuk:
select * from Table1 where ID = 1 OR ID = 2
A művelet elvégzése három részműveletből áll. Első lépés, hogy létrehozunk egy ideiglenes táblát #tmp néven. Ebbe kerül majd be az állomány SQL utasítása.
tmpcreate := 'CREATE TABLE #tmp(Query NVARCHAR(4000))';
with DM.ADOCommand1 do begin
CommandText := tmpcreate;
Execute;
A BULK INSERT művelettel beolvassuk az állomány tartalmát a #tmp táblába.
reading := 'BULK INSERT #tmp FROM ''' + ExtractFilePath(Application.ExeName) + 'sample.sql''';
CommandText := reading;
Execute;
Ezt követően lekérdezzük az SQL utasítást.
exe := 'SELECT Query FROM #tmp';
CommandText := exe;
rc := Execute;
sql := rc.Fields[0].Value;
end;
Az utasítást megadjuk az ADODataSet1 komponens CommandText property-jében. Így az eredmény látható lesz a DBGrid-ben.
with DM.ADODataSet1 do begin
CommandText := sql;
Open;
ReQuery;
end;