(TSQL)讀取格式文件寫至資料庫中

TSQL讀取實體檔案,寫至MSSQL資料庫中。

情境:

客戶端給了一個檔案,要求把清單內容裡面的資料進行批次修改。

方案一、一筆一筆透過SQL叫出來進行修改。(時間適合做些更美好的事情。)

方案二、寫支程式讀取文字檔,透過程式進行更新。(這樣似乎真的比較快)

方案三、基於關注點分離(不知道劍龍有沒有亂用),將處理資料的部分寫到Store Procedure中,後面不管是寫個Win Form還是Web,只要叫用Store Procedure就好了。

哈,不管哪個方案比較好,單純只是查查看,是不是有沒有其他方式可以進行,剛好TSQL讀取實體檔案的部分,還真的沒有嘗試過。

BULK INSERT (Transact-SQL)

於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後,第一行資料可正常寫入。