2015-11-07 33 views
0

我一直無法找到直接的答案。我想要完成的是執行需要設置變量的SSIS包,所以我需要通過SQL作業將這些變量傳遞給SSIS。我知道這是可以通過「設置值」選項卡,但我需要傳遞當前日期,所以硬編碼字符串將無法正常工作。您是否可以將GETDATE()傳遞給運行SSIS包(設置值)的SQL作業

是否可以將GETDATE()或其他表達式傳遞給設置值中的值字段?換句話說,「Value」字段是否在運行時進行評估?

如果這是不可能的,那麼將當前日期從SQL作業傳遞給SSIS包中的相應參數的好方法是什麼?

+0

SSIS軟件包不僅可以計算出自己的當前日期嗎? –

+0

是的......那是一個不好的例子。更一般地說,「設置值」可以評估傳入的語句,還是必須是硬編碼的字符串/整數? – Solaxun

回答

0

當一個工作開始SSIS包時,它傳遞的參數必須在作業中進行硬編碼。

如果您需要將更多的上下文相關值傳遞給包,我發現這樣做的最佳方式是在數據庫中填充元數據表,並讓工作的第一步是從該表中選擇最新的行並從中填充變量。

2

不幸的是,沒有。通過SQL代理作業的設置值屏幕,將諸如GETDATE()之類的方法分配給日期時間變量的value屬性是不可能的。那裏的值字段必須設置爲離散值。

我可以想到兩種解決方法。

第一個也是最簡單的選項是編輯軟件包。用BIDS/SSDT打開軟件包,找到該變量,並將該變量的「Evaluate As Expression」屬性設置爲True。然後在該變量的屬性窗口中,單擊表達式省略號...並將表達式設置爲GETDATE()。保存包。當程序包運行時,該變量將評估爲GETDATE()。

第二種方法需要多一點汗水,並且存在風險,但允許您動態設置SSIS包變量。而不是使用SQL Server作業調用一個包。調度SP的預定作業。然後,此SP將使用xp_cmdShell和DTEXEC.exe命令行工具執行SSIS包。 這是一個example。 DTEXEC.EXE命令行工具具有一個/ SET參數,它基本上與Set Values對話框的作用相同。但這是它的動態。該SP在裏面你可以

DECLARE @MyDate datetime 
SET @MyDate = GETDATE() 

你只需要到DTEXEC的/ SET參數,讓您的@MyDate值。
而不是GETDATE(),你也可以有一個參數,讓你在命令行上從%DATE%和%TIME%系統環境變量的子字符串組合中構建這個日期變量。

set MyDate=%DATE:~10,4%-%DATE:~7,2%-%DATE:~4,2% %TIME:~0,8%  
dtexec /FILE "\"D:\SSIS\Package1.dtsx\"" /SET "\"\Package.Variables[VarDateTime].Value\"";"\"%MyDate%\"" 

一個例子是here

顯然,方案一更容易,風險更小。祝你好運!

相關問題