T-SQL 中批次插入的變數轉換
在T-SQL 中,BULK INSERT 語句允許從外部資料匯入檔案存入檔案表中。但是,如果使用字串變數作為資料來源,則可能會發生錯誤。
問題:
以下 T-SQL程式碼失敗並出現錯誤(部分預存程序):
DECLARE @CSVfile nvarchar(255); SET @CSVfile = N'T:\x.csv'; BULK INSERT [dbo].[TStagingTable] -- FROM N'T:\x.csv' -- This line works FROM @CSVfile -- This line fails WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', FIRSTROW = 2 )
錯誤訊息:
Incorrect syntax near the keyword 'with'.
原因:
在BULK INSERT 語句中,FROM 子句需要文字字串作為輸入檔路徑。使用變數時,必須將其轉換為文字字串。
解決方案:
要將變數@CSVfile 轉換為文字字串,請使用下列動態T -SQL 語法:
declare @q nvarchar(MAX); set @q= 'BULK INSERT [TStagingTable] FROM '+char(39)+@CSVfile+char(39)+' WITH ( FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 1 )' exec(@q)
此程式碼產生一個動態SQL 語句,將@CSVfile 轉換為FROM 子句中的文字字串,解決問題並允許批次插入成功。
以上是如何在 T-SQL 中正確轉換變數以進行批次插入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!