Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Insertion en bloc à l'aide d'une procédure stockée

Il n'y a rien de mal avec votre code de procédure stockée - le point est :le BULK INSERT La commande ne peut pas accepter un nom de fichier en tant que variable.

Cela fonctionne :

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

mais cela ne fonctionne jamais - dans un proc stocké ou non :

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

BULK INSERT ZIPCodes 
FROM @filename
WITH 

Donc, vous ne pouvez pas le faire de cette façon, malheureusement. Vous pourriez envisager de créer votre BULK INSERT instruction sous forme de chaîne (avec un nom de fichier fixe) puis l'exécuter en tant que SQL dynamique - mais je ne vois pas vraiment d'autre solution.

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