Không có gì sai với mã thủ tục đã lưu trữ của bạn - vấn đề là:BULK INSERT
lệnh không thể chấp nhận tên tệp là một biến.
Điều này hoạt động:
BULK INSERT ZIPCodes
FROM 'e:\5-digit Commercial.csv'
WITH
nhưng điều này không bao giờ hoạt động - trong một proc được lưu trữ hoặc không:
DECLARE @filename VARCHAR(255)
SET @filename = 'e:\5-digit Commercial.csv'
BULK INSERT ZIPCodes
FROM @filename
WITH
Vì vậy, bạn chỉ không thể làm theo cách này, thật không may. Bạn có thể cân nhắc xây dựng BULK INSERT
của mình câu lệnh dưới dạng một chuỗi (với tên tệp cố định) và sau đó thực thi nó dưới dạng SQL động - nhưng tôi thực sự không thấy giải pháp nào khác.
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