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