sql >> Base de Datos >  >> RDS >> Sqlserver

Inserción masiva mediante procedimiento almacenado

No hay nada malo con su código de procedimiento almacenado - el punto es:el BULK INSERT El comando no puede aceptar un nombre de archivo como variable.

Esto funciona:

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

pero esto nunca funciona, dentro de un proceso almacenado o no:

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

BULK INSERT ZIPCodes 
FROM @filename
WITH 

Entonces, desafortunadamente, no puedes hacerlo de esta manera. Podría considerar construir su BULK INSERT declaración como una cadena (con un nombre de archivo fijo) y luego ejecútela como SQL dinámico, pero realmente no veo ninguna otra solución.

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