首頁 > 資料庫 > mysql教程 > 如何修復 SQL Server 批次插入預存程序中的「'@filepath' 附近的語法不正確」錯誤?

如何修復 SQL Server 批次插入預存程序中的「'@filepath' 附近的語法不正確」錯誤?

Susan Sarandon
發布: 2024-12-29 04:10:13
原創
471 人瀏覽過

How to Fix

透過儲存程序批次插入:解決錯誤

在嘗試將工作批次插入查詢封裝到預存程序時,使用者遇到了在BULK INSERT 語句中使用檔案變數時發生錯誤。使用者的預存程序程式碼如下:

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
登入後複製

但是這段程式碼導致如下錯誤:

Msg 102, Level 15, State 1, Procedure
InsertZipCode, Line 6 Incorrect syntax
near '@filepath'.

Msg 319, Level 15, State 1, Procedure
InsertZipCode, Line 7 Incorrect syntax
near the keyword 'with'. If this
statement is a common table
expression, an xmlnamespaces clause or
a change tracking context clause, the
previous statement must be terminated
with a semicolon.
登入後複製

這個問題的癥結在於BULK INSERT無法接受檔案名稱作為變數。雖然這樣的語句是有效的:

BULK INSERT ZIPCodes 
FROM  'e:-digit Commercial.csv' 
WITH 
登入後複製

在BULK 中使用檔案名稱變數(例如DECLARE @filename VARCHAR(255) SET @filename = 'e:5-digit Commercial.csv') INSERT 語句不可避免地會失敗。

要解決此問題,一種可行的方法是將BULK INSERT 語句構造為一個字串(具有固定檔名)並使用sp_executesql 動態執行它:

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
登入後複製

透過遵守這些準則,可以避免BULK INSERT 無法接受檔案名稱變數的問題,從而成功建立執行批次插入的預存程序。

以上是如何修復 SQL Server 批次插入預存程序中的「'@filepath' 附近的語法不正確」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板