6

我在从批量插入语句中插入空值时遇到问题。

两列可以为空,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 的 int 列和具有 00:00:00 的 time 列

在此处输入图像描述

4

2 回答 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)
于 2012-11-14T22:12:11.380 回答
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

于 2012-09-20T10:57:39.167 回答