Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Masseneinfügung mit gespeicherter Prozedur

An Ihrem Code für gespeicherte Prozeduren ist nichts auszusetzen - der Punkt ist:der BULK INSERT Befehl kann keinen Dateinamen als Variable akzeptieren.

Das funktioniert:

BULK INSERT ZIPCodes 
FROM  'e:\5-digit Commercial.csv' 
WITH 

aber das funktioniert nie - innerhalb einer gespeicherten Prozedur oder nicht:

DECLARE @filename VARCHAR(255)
SET @filename = 'e:\5-digit Commercial.csv' 

BULK INSERT ZIPCodes 
FROM @filename
WITH 

So kann man das leider nicht machen. Sie könnten erwägen, Ihre BULK INSERT aufzubauen Anweisung als String (mit festem Dateinamen) und dann als dynamisches SQL ausführen - aber ich sehe keine andere Lösung.

DECLARE @filepath nvarchar(500)
SET @filepath = N'e:\5-digit Commercial.csv'

DECLARE @bulkinsert NVARCHAR(2000)

SET @bulkinsert = 
       N'BULK INSERT ZIPCodes FROM ''' + 
       @filepath + 
       N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')'

EXEC sp_executesql @bulkinsert