2012-09-19 48 views
6

我無法從批量插入語句插入空值。sql server批量插入空值到時間列

兩列可以爲空並且Id是標識。

int可以爲空,但time不可以。

  • 這裏的散裝聲明:

    BULK INSERT Circulation 
    FROM '.....file.cs' 
    WITH (FIRSTROW = 2, MAXERRORS = 0, FIELDTERMINATOR = ',', 
        ROWTERMINATOR = '', KEEPNULLS) 
    
  • 這裏是CSV的摘錄:

    ID, IDStopLine, IDException, Hour, PositionHour, Day 
    
    ,28, 8, 12:20, 52, 0 
    
    ,29, 163, , 1, 
    

含義,我試圖在這些插入兩個空列。其結果是NULL i將int型柱,並且00:00:00

enter image description here

+0

這甚至不是批量插入語句,該示例使用帶有「insert」「values」命名的SP – Diogo

回答

1

時間列插入「NULL」,而不是「col2的默認值」,則需要使用-k開關或KEEPNULL選項,如以下bcp和BULK INSERT示例所示。

USE AdventureWorks; 
GO 
BULK INSERT MyTestDefaultCol2 
    FROM 'C:\MyTestEmptyField2-c.Dat' 
    WITH (
     DATAFILETYPE = 'char', 
     FIELDTERMINATOR = ',', 
     KEEPNULLS 
    ); 
GO 

http://msdn.microsoft.com/en-us/library/ms187887.aspx

2

我不知道爲什麼時間柱00:00:00插入,但如果你需要NULL,則可以嘗試創建觸發器與FIRE_TRIGGER參數

運行BULK INSERT
CREATE TRIGGER dateNull ON dbo.Circulation 
INSTEAD OF INSERT 
AS 
BEGIN 
    INSERT dbo.Circulation(IdStopline, IdException, Hour, PositionHour, Day) 
    SELECT IdStopline, IdException, NULLIF(Hour, '00:00:00.0000000'), PositionHour, Day FROM inserted 
END  

BULK INSERT dbo.Circulation 
FROM 'you_file.csv' 
WITH (FIRSTROW = 2, 
     MAXERRORS = 0, FIELDTERMINATOR = ',', 
     ROWTERMINATOR = '\n', KEEPNULLS, FIRE_TRIGGERS)