0

我有一個關於如何在SSIS中設置優先約束的問題。級聯優先約束SSIS

我在包下列流程:

enter image description here

  • 執行SQL任務返回以這種格式「1111」,其然後被存儲在被稱爲「數據」可變
  • 一個字符串值
  • 這一切的關鍵在於控制執行哪個腳本任務 例如,如果值爲「1111」,則所有4個腳本都可以運行。 如果值是「1011」,那麼腳本1,3,4就會運行...你得到的圖片
  • 在所有情況下,腳本DEPEND都是前一個腳本。
  • 約束用以下表達式進行評估:例如,對於腳本2,SUBSTRING(@ [User :: data],2,1)==「1」。

問題: 如果其中一個腳本不運行,那麼下一個腳本不會運行(因爲約束永遠不會被評估)。例如,對於data =「1011」,腳本3和腳本4永遠不會運行,因爲編號2從未運行過......

您是否知道更好的方法來完成此項工作?

在BIDS中使用SQL Server 2008

+0

這取決於您可以擁有多少個不同的值,但是您可以在'SQL任務'後面用'條件分割'來完成。如果這是不可能的,編輯你的腳本,當值1011到達腳本2時,它只是將它傳遞給腳本3而不進行任何轉換。 – DenStudent

+0

@DenStudent條件拆分是一個「數據流」任務元素,而不是「控制流」。你有什麼想法可以達到最終結果嗎?我只有這4個腳本。 – dhuesca

回答

2

enter image description here

我@Iamdave同意他的方向說,修改每個腳本腳本做檢查那裏是否應該或不應該執行,而不是使用表達式的約束。

但是,因爲有人可能想要使用數據流任務來完成此任務,或者可以使用SSIS組件來完成此操作。你的問題是你想有條件地執行一個任務,但是不管這個任務是否被執行,你都想有條件地執行另一個任務。通過將每個腳本任務放置在序列容器中,序列容器之間的優先順序將始終使其他容器執行,只要前一個容器不失敗或者沒有表達式作爲約束。但是一旦在容器中,您需要能夠設置一個有條件的優先順序。您可以通過在腳本任務之前添加某種虛擬任務並在該優先級上添加約束來實現此目的。

0

在腳本中添加一些條件代碼。

例如,在腳本任務1的開始:

if firstcharacter(Variable) = 1 
    do things 
else 
    do nothing 

然後在腳本任務2:

if secondcharacter(Variable) = 1 
    do things 
else 
    do nothing 

,只是確保所有的數據通過,只是被改造如果變量中的正確字符被滿足。

+0

由於OP使用腳本,我會認爲這是最好的解決方法。但是,如果他的所有腳本任務實際上都有數據流任務,則這不起作用。 – Matt