首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 批量插入去除雙引號:動態 SQL 中 REPLACE 單引號轉義技巧

     編輯:程式設計綜合問答

使用 OPENROWSET(BULK...) 批量導入文字檔到 SQL Server 時,若資料欄位被雙引號 " 包裹,需在插入前移除。在動態 SQL 字串中呼叫 REPLACE(col, '"', '') 會因單引號巢狀導致語法錯誤,關鍵在於正確轉義單引號。

錯誤示範

-- 錯誤:單引號衝突
SELECT REPLACE(aa, '"', ''), ...

正確寫法:雙寫單引號轉義

在 SQL Server 字串常值中,單引號以「兩個單引號」表示。因此 '"'" 代表字串 '"(單引號包裹雙引號),'''' 代表字串 ''(空字串)。完整 REPLACE 參數寫法:

REPLACE(aa, '""', '')  -- 移除雙引號
-- 完整動態 SQL 片段
exec ('INSERT INTO xxdd (aa,bb,cc,dd,ee,ff)
SELECT REPLACE(aa,''"'',''''), REPLACE(bb,''"'',''''), ...
FROM OPENROWSET(BULK ''' + @filepath + ''', FORMATFILE=''' + @fmtfilepath + ''', FIRSTROW=2, MAXERRORS=10, ROWS_PER_BATCH=10000) AS t')

原理解析

  • '"" → 字串常值 ""(雙引號)
  • '''' → 字串常值 ''(空字串,即替換後的目標)
  • 最外層動態 SQL 用單引號包裹,內部單引號皆雙寫,避免提前結束字串。

替代方案:格式化檔案指定欄位終止符

若可控制來源檔案格式,建議在 .fmt 格式化檔中直接設定欄位終止符與引號字元,讓 OPENROWSET 自動解析去除引號,避免動態 SQL 複雜轉義,效能也更好。

掌握單引號雙寫轉義規則,即可在動態 SQL 中靈活使用 REPLACE 等字串函式處理髒資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved