Nie ma nic złego w kodzie procedury składowanej — chodzi o to:BULK INSERT
polecenie nie może zaakceptować nazwy pliku jako zmiennej.
To działa:
BULK INSERT ZIPCodes
FROM 'e:\5-digit Commercial.csv'
WITH
ale to nigdy nie działa - w ramach zapisanego procesu lub nie:
DECLARE @filename VARCHAR(255)
SET @filename = 'e:\5-digit Commercial.csv'
BULK INSERT ZIPCodes
FROM @filename
WITH
Więc po prostu nie możesz tego zrobić w ten sposób, niestety. Możesz rozważyć utworzenie BULK INSERT
jako ciąg znaków (ze stałą nazwą pliku), a następnie wykonać ją jako dynamiczny SQL - ale tak naprawdę nie widzę żadnego innego rozwiązania.
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