使用 BULK INSERT 如何插入 NULL 到資料行

本文將介紹使用 BULK INSERT 想要插入 NULL 到資料行時,該如何進行。

情境說明

論壇上有朋友討論到使用 BULK INSERT 大量匯入資料時,想要插入 null 到允許 null 的資料行,本文將介紹可能的解決方案。

重現問題

首先使用下列 T-SQL 來建立 BULK INSERT 所要大量匯入的資料表。

 

use tempdb
go

			
IF OBJECT_ID('dbo.t1') IS NOT NULL
    DROP TABLE t1
GO

			
CREATE TABLE t1
(
    STORE_NO nvarchar(4) not null,
    ACCMTH decimal(6,0) not null,
    UDREF_Q decimal(18,0) null,
    UDREF_A decimal(18,2) null,
    UDFORT_Q decimal(18,0) null,
    UDFORT_A decimal(18,2) null
    CONSTRAINT pk1 PRIMARY KEY(STORE_NO,ACCMTH)
)
 
假設您要匯入的檔案為【c:\temp\txt.txt】,其內容如下:
 
SNAGHTML68b8fa3
 
 
接著您使用下列的 T-SQL 來大量匯入資料,此時將會遇到【Bulk load data conversion error】轉型失敗的錯誤。
 
bulk insert t1 from 'c:\temp\txt.txt'
with
(
    fieldterminator=',',
     rowterminator='\n'
)
 
 
image
解決方式
只要在文字檔中將要對應插入 NULL 的欄位改以空字串取代,接著再重新使用上述的 T-SQL 來匯入資料即可。
 
 
SNAGHTML69459a6
image
 
 
由於 BULK INSERT 不支援忽略資料行標頭,若您要匯入的資料只有一列,記得在最後一列下面多加一列空白,否則第一列有資料的部分會被忽略。
 
SNAGHTML699939a

參考資料

- 大量匯入期間保留 Null 或使用預設值 (SQL Server)