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