SQL Server批量插入NULL到时间列中

6

我在执行批量插入语句时遇到了插入空值的问题。

这两列是可空的,而且 Id 是自增长的。

int 可空类型执行良好,但 time 类型不行。

  • Here the bulk statement:

    BULK INSERT Circulation 
    FROM '.....file.cs' 
    WITH ( FIRSTROW = 2, MAXERRORS = 0, FIELDTERMINATOR = ',', 
         ROWTERMINATOR = '', KEEPNULLS)
    
  • Here is an extract of the csv:

    ID, IDStopLine, IDException, Hour, PositionHour, Day
    
    ,28, 8, 12:20, 52, 0
    
    ,29, 163, , 1, 
    
意思是我试图在这两列中插入空值。结果是整数列为NULL,时间列为00:00:00。

这甚至不是一个批量插入语句,该示例使用带有“insert”“values”命名法的存储过程。 - Diogo
2个回答

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)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接