我在批量插入语句中插入空值时遇到问题。
两列可以为空,Id是标识。
int
nullable工作正常,但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,
这意味着我正在尝试在这两列中插入空值。结果是int列为NULL,时间列为00:00:00
答案 0 :(得分: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 :(得分: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