SSIS插入不插入计算列

时间:2012-02-03 07:59:16

标签: ssis bulkinsert calculated-columns

我正在使用SSIS将Excel文件插入到Sql Server表中。我相信它使用Bulk插入,因此它不会插入'CreationDate'和'ModificationDate'列(两者都是使用getdate()作为默认值的计算列)。

有没有办法解决这个问题?

另外,为了清楚起见 - 这两个日期列都不是excel的一部分。这是确切的情况:

我的Excel有两列 - 代码和说明。我的SQL Server表有4列Code,Description,CreationDate,ModificationDate。

因此,当SSIS复制数据时,它会复制代码和描述,但CreationDate和ModificationDate(它们是SQL Server Computed Columns)都是空的。

4 个答案:

答案 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的选项。

来自Bulk Insert on MSDN:

  

指定空列在批量导入操作期间应保留空值,而不是具有任何默认值   插入的列。有关更多信息,请参阅保留空值或使用   批量导入期间的默认值。

还记录了KEEPNULLS:http://msdn.microsoft.com/en-us/library/ms187887.aspx

答案 2 :(得分:0)

在数据流中输入派生列,并使用所需的值填充两个缺少的列。

答案 3 :(得分:0)

计算列上的值在数据库中实际上不存在,每次SQL Server需要访问它时都会计算它,这就是为什么你不能在插入时通知它的值。

您需要的是默认列,如果您不通知任何其他值,则该列具有插入的默认值。

CreationDate datetime default getdate()
ModificationDate datetime default getdate()