我正在使用SSIS将Excel文件插入到Sql Server表中。我相信它使用Bulk插入,因此它不会插入'CreationDate'和'ModificationDate'列(两者都是使用getdate()作为默认值的计算列)。
有没有办法解决这个问题?
另外,为了清楚起见 - 这两个日期列都不是excel的一部分。这是确切的情况:
我的Excel有两列 - 代码和说明。我的SQL Server表有4列Code,Description,CreationDate,ModificationDate。
因此,当SSIS复制数据时,它会复制代码和描述,但CreationDate和ModificationDate(它们是SQL Server Computed Columns)都是空的。
答案 0 :(得分:3)
如果要记录创建,则应使用带有默认约束的普通列
定义为GETDATE()
的{{3}}每次查询时都会更改。
计算列也不可能不填充
因此,假设您的意思是“默认的普通列”,那么您需要来自SSIS的computed column来覆盖默认值
这一切都在这里展示:
CREATE TABLE #foo (
bar int NOT NULL,
testCol1Null datetime NULL DEFAULT GETDATE(),
testCol1NotNull datetime NOT NULL DEFAULT GETDATE(),
testCol2 AS GETDATE()
);
INSERT #foo (bar, testCol1Null) VALUES (1, NULL);
SELECT * FROM #foo;
WAITFOR DELAY '00:00:00.100';
SELECT * FROM #foo;
WAITFOR DELAY '00:00:00.100';
SELECT * FROM #foo;
DROP TABLE #foo;
假设您使用的是stop sending NULL,那么您需要在选项页面中设置“保持空值=关闭/取消选中”
答案 1 :(得分:1)
您应该在指定get
的列上有一个默认约束col1 datetime default getdate()
应该关闭批量插入KEEPNULLS
的选项。
指定空列在批量导入操作期间应保留空值,而不是具有任何默认值 插入的列。有关更多信息,请参阅保留空值或使用 批量导入期间的默认值。
还记录了KEEPNULLS:http://msdn.microsoft.com/en-us/library/ms187887.aspx
答案 2 :(得分:0)
在数据流中输入派生列,并使用所需的值填充两个缺少的列。
答案 3 :(得分:0)
计算列上的值在数据库中实际上不存在,每次SQL Server需要访问它时都会计算它,这就是为什么你不能在插入时通知它的值。
您需要的是默认列,如果您不通知任何其他值,则该列具有插入的默认值。
CreationDate datetime default getdate()
ModificationDate datetime default getdate()