簡體   English   中英

SSIS SQL TASK MAX(DATE)到數據流中的變量

[英]SSIS SQL TASK MAX(DATE) to Variable in DATA FLOW

好的,這似乎應該非常簡單,但是我無法弄清楚。 我在網上看到的每個地方都說要創建臨時表和VB腳本,我不敢相信我必須這樣做。 我的目標是將所有記錄插入表中,該日期晚於該目標表中的最大日期。 更新 2個表位於兩個不同的非鏈接SQL數據庫中,因此:

Select @[User::Dated] = MAX(Dateof) from Table2

Insert into Table2
Select *
From Table1
Where DateOf > @[User::Dated]

我正在嘗試在SSIS中執行此操作。 我聲明了一個變量,SQL執行步驟看起來像是將單行輸出分配給它。 但是當我進入數據流時,沒有任何參數可供選擇,當我強制項目范圍中的已知參數時,它說不存在任何參數

創建兩個OLE DB數據源,每個數據源指向您兩個數據庫。

創建一個名為max_date的變量,並將其數據類型設置為String。

將執行SQL任務放在控制流上,將其連接類型更改為OLE DB,並為該連接選擇包含Table2的數據源的名稱。 將ResultSet設置為Single Row。 為SQLStatement添加以下內容:

SELECT CAST(MAX(Dateof) AS VARCHAR) AS max_date FROM Table2

轉到結果集窗格,單擊添加,然后輸入以下內容:

Result Name: max_date
Variable Name: User::max_date

現在,您可以在表達式中使用max_date變量來創建SQL語句,例如,可以在另一個執行SQL任務中使用它,該任務將使用第二個數據連接,如下所示:

"INSERT INTO Table2
SELECT *
FROM Table1
WHERE DateOf > '" + @[User::max_date] + "'"

或在OLE DB Source的數據流中,如下所示:

"SELECT *
FROM Table1
WHERE DateOf > '" + @[User::max_date] + "'"

如果需要,可以在單個SQL任務中執行此操作:

Insert into Table2
Select *
From Table1
Where DateOf > (Select MAX(Dateof) from Table2)

如果要在控制流中使用多個Execute SQL Task項,或者要在數據流中使用該參數,則必須將MAX()查詢的General > Result Set選項更改為Single Row ,然后從“ General移至“ Result SetAdd一個新變量供您的結果集使用。

要通過Execute SQL TaskINSERT INTO....查詢中使用該變量,您將使用?構造查詢? 每個參數並在參數映射部分中將它們映射。 如果在查詢中多次使用變量,則最容易使用存儲過程,因此您只需在SSIS中傳遞相關參數即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM