Não há nada de errado com seu código de procedimento armazenado - o ponto é:o
BULK INSERT
O comando não pode aceitar um nome de arquivo como uma variável. Isso funciona:
BULK INSERT ZIPCodes
FROM 'e:\5-digit Commercial.csv'
WITH
mas isso nunca funciona - dentro de um proc armazenado ou não:
DECLARE @filename VARCHAR(255)
SET @filename = 'e:\5-digit Commercial.csv'
BULK INSERT ZIPCodes
FROM @filename
WITH
Então você simplesmente não pode fazer isso dessa maneira, infelizmente. Você pode considerar construir seu
BULK INSERT
declaração como uma string (com um nome de arquivo fixo) e, em seguida, executá-lo como SQL dinâmico - mas eu realmente não vejo nenhuma outra solução. 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