2012-02-03 123 views
-1

我正在使用SSIS將Excel文件插入到Sql Server表中。我相信它使用Bulk插入,因此它不會插入'CreationDate'和'ModificationDate'列(兩者都是使用getdate()作爲默認值的計算列)。SSIS插入不插入計算列

有沒有辦法解決這個問題?

此外,只是要清楚 - 這兩個日期列不是Excel的一部分。這是確切的場景:

我的excel有兩列 - 代碼和說明。我的SQL Server表有4列Code,Description,CreationDate,ModificationDate。

所以,當SSIS複製數據時,它複製代碼和描述,但CreationDate和ModificationDate(它們是SQL Server計算列)都是空的。

+2

通過計算您的意思是「SSIS中的計算列」還是「目標表中具有默認值的常規列」? 「計算列」在SQL Server中有精確的含義,這聽起來不像它 – gbn 2012-02-03 08:04:06

+0

它是SQL Server中的「計算列」。它使用sqlserver命令getdate() – Prabhuram 2012-02-03 08:05:29

+2

@Prabhuram進行計算 - 事實並非如此。如果*有*一個被定義爲'CreationDate as getdate()'的計算列,它將總是返回當前的日期時間。正如gbn暗示的那樣,你的意思是這些列有一個默認值。 – 2012-02-03 08:13:15

回答

3

,如果你想日誌創建 你應該用正常的柱,以默認約束一個computed column定義爲GETDATE()每次查詢它的時候會改變。

這也是不可能的計算列填充

因此,假設你的意思是「用默認的正常列」,那麼你需要從SSIS stop sending NULL將覆蓋默認

這是這裏所有的證明:

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; 

假設你正在使用的Bulk Insert Task in SSIS,那麼你就需要設置「保持空值= OFF /取消選中」在選擇PA GE

1

您應該對指定列(或多個)默認約束得到

col1 datetime default getdate() 

還應該有大頭的一個選項插入KEEPNULLS應該被關閉。

Bulk Insert on MSDN:

指定空列應大容量導入操作期間保留的,而不是具有用於插入 列的任何默認值的空值,。有關更多信息,請參閱在批量導入過程中保留空值或使用默認值 。

KEEPNULLS也記載:http://msdn.microsoft.com/en-us/library/ms187887.aspx

0

放在你的數據流派生列,並填充兩名失蹤列你想要的值。

0

計算列上的值在數據庫上並不物理存在,每次SQL Server需要訪問它時都會計算它,這就是爲什麼在插入時無法通知值。

你需要的是一個默認列,如果你不通知任何其他的值,那麼這個列是一個默認值。

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