嘗試使用BULK INSERT 指令建立用於批次插入資料的預存程序時,您可能會遇到錯誤。當嘗試將檔案路徑變數指派給預存程序中的檔案名稱參數時,就會出現這樣的錯誤。
在典型的BULK INSERT 查詢中,將檔案路徑指定為字串可以正常工作:
BULK INSERT ZIPCodes FROM 'e:-digit Commercial.csv' WITH ( FIRSTROW = 2 , FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' )
但是,當嘗試建立具有可變檔案路徑的預存程序時,您可能會遇到錯誤:
create proc dbo.InsertZipCode @filepath varchar(500)='e:-digit Commercial.csv' as begin BULK INSERT ZIPCodes FROM @filepath WITH ( FIRSTROW = 2 , FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) end
'@filepath' 和'with'附近的語法不正確
出現此錯誤是因為 BULK INSERT 指令不支援檔案路徑作為變數。要解決此問題,您可以:
使用動態SQL 構建批量插入聲明
DECLARE @filepath nvarchar(500) SET @filepath = N'e:-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
這種方法可讓您保持使用不同檔案路徑的彈性,同時利用預存程序進行批次插入。
以上是如何解決使用可變檔案路徑時的批次插入預存程序錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!