TSQL讀取實體檔案,寫至MSSQL資料庫中。
情境:
客戶端給了一個檔案,要求把清單內容裡面的資料進行批次修改。
方案一、一筆一筆透過SQL叫出來進行修改。(時間適合做些更美好的事情。)
方案二、寫支程式讀取文字檔,透過程式進行更新。(這樣似乎真的比較快)
方案三、基於關注點分離(不知道劍龍有沒有亂用),將處理資料的部分寫到Store Procedure中,後面不管是寫個Win Form還是Web,只要叫用Store Procedure就好了。
哈,不管哪個方案比較好,單純只是查查看,是不是有沒有其他方式可以進行,剛好TSQL讀取實體檔案的部分,還真的沒有嘗試過。
於Store Procedure中宣告一個暫存資料表A,然後讀取檔案,寫至資料表中,再來就視需求進行調整囉。
BULK INSERT tablename
from FileName
with (
FIELDTERMINATOR=',' --CSV分隔符號常為,,預設為\t(定位字元)
)
上述參數說明:
FIELDTERMINATOR:指定要用於 char 和 widechar 資料檔案的欄位結束字元。 預設欄位結束字元是 \t (定位字元)。
ROWTERMINATOR:指定要用於 char 和 widechar 資料檔案的資料列結束字元。 預設的資料列結束字元是 \r\n (新行字元)。
其他參數請參考下述連結:
參考連結:https://docs.microsoft.com/zh-tw/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017
備註:
SQL Server 2008 匯入時出現錯誤訊息:
大量載入資料轉換錯誤 (類型不符或指定字碼頁的字元無效) 於資料列 1,資料行 1
將第一行的資料移至其他行正常,但是還是出現同樣的錯誤訊息,透過google了解到 SQL Server 2008 BULK Insert 不支援UTF-8,將文字檔編碼方式改為unicode後,第一行資料可正常寫入。