2012-11-28 54 views
4

正如您在下面的圖片中看到的,我在SQL Server中有一個表,我通過平面文件源進行填充。目標表中有兩列,我想根據下面列出的邏輯進行更新:SSIS - 在OLE DB中填充表中未映射的列目的地

  • SessionID - 來自第一個CSV導入的所有行將具有值1;第二次導入的值爲2,依此類推。
  • TimeCreated - 發生CSV導入時的日期時間值。

我不需要如何編寫TSQL代碼來完成這件事的幫助。相反,我希望有人建議一種方法在SSIS中將其作爲數據流任務來實現。

enter image description here

預先感謝您爲您的想法。

編輯2012年11月29日

由於所有的答案迄今建議照顧這對SQL Server端,我想告訴你我最初曾試圖做(見下圖),但它不起作用。在SSIS將數據插入目標表後,觸發器在SQL Server中未觸發。

如果您有任何人可以解釋爲什麼觸發器沒有觸發,那會很好。

enter image description here

回答

5

如果您能夠修改目標表,則可以使SessionID和TimeCreated的默認值爲您完成所有工作。 SessionID將是一個自動增量整數,而TimeCreated的默認值將是getdate()或gettime(),具體取決於數據類型。

現在,如果您確實需要創建作爲工作流程一部分的值,則可以爲每個值使用變量。

SessionID將是由執行SQL任務設置的包變量。只需在結果集中引用該變量,並讓SQL確定要使用的下一個數字。不過,這有潛在的併發問題。

TimeCreated很容易通過基於系統變量StartTime在數據流中創建派生列來完成。

+0

我最初試圖通過SQL Server來做這件事。我對最初的文章進行了編輯,解釋了我的過程。 我會嘗試實施你的SSIS解決方案 - 我會讓你知道這是怎麼回事。 –

+0

這工作!謝謝! –

0

首先,我會做的更好的SQL Server端:)
但是,如果你不想或者不能做的服務器端,您可以使用此方法:

很明顯,您需要將SessionID存儲在某處,您可以爲SQL Server創建一個txt文件或更好地設置某個設置表,或者可以使用其他方法。

要將列SessionIDTimeCreated添加到OLE目標,您可以使用Derived columns

+0

感謝您的輸入Igor。我無法將SessionID存儲在文本文件中,因爲它具有條件值。 –

2

您可以使用一個派生列,以填補TimeCreated列,如果你想要的數據流的時候發生,你只需要使用日期和時間函數來獲取當前的日期時間。如果你想爲整個軟件包(所有文件)提供一個通用的時間戳,你可以使用系統變量@[System::StartTime](或者什麼被分類)。

對於CSV循環(我猜),您使用了一個foreach循環容器,並將迭代值映射到您在上面提到的SessionID的派生列中映射的用戶變量。

+0

感謝您的輸入。我會讓你知道它是怎麼回事。 –