Tímto skriptem lze importovat data do SQL pomocí příkazu BULK INSERT. Příkaz FIRSTROW není nutné uvádět, ale využívám ho, když je v prvním řádku záhlaví sloupců a to je třeba při importu igronovat.

1
2
3
4
5
6
7
8
BULK INSERT MyTable 
FROM 'C:\cesta\soubor.csv' 
	WITH (
	      FIELDTERMINATOR =',',	--oddělovač dat
              ROWTERMINATOR ='\n',	--ukončení řádku
	      FIRSTROW = 1,		--první řádek importu
              CODEPAGE = 'ACP'          --koódování
	     )          

 

Pro použití v praxi je však většinou třeba zadat cestu k souboru. Tu do procedury zadáme v proměnné. Jelikož je třeba cestu ukládat do uvozovek, nelze použít konstrukci BULK INSERT @Cesta FROM ...  Nejlepší je použít dynamického SQL, celý příkaz vč.cesty vložit do proměnné a tu pak zavolat příkazem EXEC.

 

Zde je kompletní příklad, který v praxi používám (lze vychytat dalším vkládáním proměnných např. pro separátor, atd)

 Vytvoření tabulky

1
2
3
4
5
6
7
CREATE TABLE #TestImport			
	(
	Jmeno		nvarchar(50),                          
	DatumNar	datetime,
	Vek		int,
	Bydliste	nvarchar(100)
	)

 

Vytvoření csv souboru data.csv a uložení do adresáře C:\TestData (lze samozřejmě použít i UNC cestu třeba na serveru, ale SQL musí tento soubor vidět stejnou cestou jako program, který volá proceduru a do proměnné vkládá cestu)

 

Skript pro import dat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE 
 @Path nvarchar(MAX),
 @SQL nvarchar(MAX)
 
SET @Path = 'C:\TestData\data.csv'
 
SET @SQL = 'BULK INSERT #TestImport 
		FROM ''' +@Path+''
		   WITH (
			 FIELDTERMINATOR ='','',
			 ROWTERMINATOR =''\n'',
			 FIRSTROW = 1,
                         CODEPAGE = ''ACP''
			)'
 
EXEC (@SQL)

 

 Výsledek

 

Ještě je nutno podotknout, že daný uživatel musí mít na SQL práva bulkadmin