」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 BULK INSERT 不接受預存程序中的變數檔案路徑?

為什麼 BULK INSERT 不接受預存程序中的變數檔案路徑?

發佈於2024-12-22
瀏覽:666

Why Doesn't BULK INSERT Accept Variable File Paths in Stored Procedures?

使用預存程序批次插入:故障排除

在嘗試使用預存程序批次插入資料時,開發人員遇到了語法錯誤。目標是將有效的 BULK INSERT 查詢複製到流程中。以下是對此問題及其解決方案的分析。

此問題是由於嘗試將檔案名稱作為變數傳遞給預存程序中的 BULK INSERT 指令而造成的。不幸的是,這是 BULK INSERT 不支援的操作。

以下是使用變數嘗試失敗的範例:

DECLARE @filename VARCHAR(255)
SET @filename = 'e:\5-digit Commercial.csv'

BULK INSERT ZIPCodes
FROM @filename
WITH

相反,BULK INSERT 指令需要硬編碼的檔案路徑。若要解決此限制,請考慮將 BULK INSERT 語句建構成固定檔名的字串,並將其作為動態 SQL 執行。

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

透過使用動態SQL,可以執行建構的語句,解決了原來在預存程序實作中遇到的語法錯誤。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3