2017-06-12 66 views
2

我有一份定期運行的報告,並將其放入臨時數據庫中供審閱。它通過一個SSIS進行處理,轉換數據;但是,我想添加一個run ID,每次運行趨勢報告時都會以整數形式遞增,但到目前爲止還無法確定如何執行此操作。如何在SQL Server和SSIS中創建「運行ID」

的目標是不是從一個運行相同數量的

理想分配於各行的新號碼,但分配的所有行,它會在SSIS更容易爲我做它通過一個派生列不是改變SQL代碼,但我會考慮這兩個選項。

RunID Name 
----- |---------------- 
1 | A 
1 | B 
1 | C 
1 | D 
2 | A 
2 | B 
2 | C 
3 | A 
+0

數據是否從暫存表中刪除?你能做一些像'RunID =(從stg_table)+ 1'選擇max(RunID)? (請注意是否需要創建索引) – RToyo

+1

如果您使用2012或更高版本,則可以使用序列對象,如果使用2008或更低版本,則可以使用序列對象。 –

+2

從你的描述來看,日期和時間可能比簡單的整數更有用。 –

回答

2

可以使用可變

  1. 包您可以添加存儲整數@包變量實現這一點[用戶::指定runid]
  2. 在每個包的執行得到最大的runid使用類似的查詢中使用Execute SQL Task目標表:

    select ISNULL(max(RunID),0) + 1 from stg_table 
    
  3. 此值添加到變量作爲ResultSet

這樣的值將通過1上的每個包執行

約mappinf結果變量在下面的鏈接的更詳細的信息遞增:

+0

我目前有什麼類似的東西,但我無法找到如何在我的數據流任務下執行「執行SQL任務」。我試圖用ADO NET源代碼完成同樣的事情,並使用該小型SQL語句。這會完成同樣的事情嗎? – programr

+0

您必須在數據流任務之前運行它,將值存儲在變量中,然後在數據流任務中使用此變量創建派生列 – Hadi

+0

謝謝!這種方法奏效。 – programr

2

爲RunID創建一個IDENTITY列的表。該表可以容納任何有關您想要運行的其他信息,但至少我會包含運行日期時間。

讓SSIS包中的第一步是向表中插入新行並獲取IDENTITY,並用新行的IDENTITY填充包變量。這就是你的RunID,然後你可以隨心所欲地做任何事情。

作爲獎勵,您將擁有一段永久性的運行記錄,包括運行時間,以及您選擇存儲的任何其他元數據。

相關問題