Det är inget fel med din lagrade procedurkod - poängen är:BULK INSERT
kommandot kan inte acceptera ett filnamn som en variabel.
Det här fungerar:
BULK INSERT ZIPCodes
FROM 'e:\5-digit Commercial.csv'
WITH
men detta fungerar aldrig - inom en lagrad proc eller inte:
DECLARE @filename VARCHAR(255)
SET @filename = 'e:\5-digit Commercial.csv'
BULK INSERT ZIPCodes
FROM @filename
WITH
Så du kan bara inte göra på det här sättet, tyvärr. Du kan överväga att bygga upp din BULK INSERT
sats som en sträng (med ett fast filnamn) och sedan köra den som dynamisk SQL - men jag ser egentligen ingen annan lösning.
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