SSIS - 5.优先约束
? 一、優(yōu)先約束和執(zhí)行邏輯
任務(wù)和容器是SSIS中的可執(zhí)行文件,一個(gè)優(yōu)先約束連接著兩個(gè)可執(zhí)行文件:優(yōu)先的可執(zhí)行文件和約束的可執(zhí)行文件,如下圖。
它的執(zhí)行邏輯如下圖:
1)先執(zhí)行優(yōu)先可執(zhí)行文件
2)判斷優(yōu)先約束的結(jié)果是否為真
3)若為真,則執(zhí)行約束可執(zhí)行文件,否則結(jié)束進(jìn)程
二、優(yōu)先約束的設(shè)置
優(yōu)先約束的判斷結(jié)果取決于優(yōu)先的可執(zhí)行文件執(zhí)行時(shí)的返回結(jié)果是否與優(yōu)先約束的設(shè)置或表達(dá)式結(jié)果相匹配。一個(gè)可執(zhí)行文件的執(zhí)行結(jié)果可以是成功或者失敗。優(yōu)先的可執(zhí)行文件可以選擇3種執(zhí)行結(jié)果:成功、失敗和完成。下面是優(yōu)先約束的設(shè)置及對(duì)應(yīng)的優(yōu)先可執(zhí)行文件執(zhí)行的返回結(jié)果。
?????? 三、下面實(shí)際操作一下:
????????1)創(chuàng)建并打開(kāi)一個(gè)SSIS的空白包,定義變量V,數(shù)據(jù)類型為int32,默認(rèn)值為1。
2)拖拽一個(gè)腳本任務(wù)到設(shè)計(jì)區(qū)域,重命名為“Source”,然后瀆復(fù)制這個(gè)腳本任務(wù)并重命名為“Destination”,然后使用優(yōu)先約束連接,如下圖。
3)執(zhí)行包,可以看到執(zhí)行成功了。
4)單擊“停止調(diào)試”按鈕關(guān)閉執(zhí)行,打開(kāi)腳本任務(wù)“Source”和“Destination”后可以看到里面的代碼。
?
5)修改腳本任務(wù)“Source”中95行的代碼如下。
Dts.TaskResult = (int)ScriptResults.Failure;
6)再執(zhí)行包,可以看到執(zhí)行錯(cuò)誤。這是以為“Source”返回的是“失敗”,而優(yōu)先約束定義的是執(zhí)行成功后繼續(xù),這樣,包執(zhí)行完“Source”任務(wù)后就會(huì)停止執(zhí)行。
7)在綠色的線上右鍵,然后“失敗”。
8)再次執(zhí)行包,可以看到“Destination”任務(wù)執(zhí)行成功了,這是因?yàn)椤癝ource”返回的失敗與優(yōu)先約束中的設(shè)置匹配。
9)上圖紅色的箭頭線上右鍵->選擇“編輯...”->打開(kāi)優(yōu)先約束編輯器。
在約束選項(xiàng)中,計(jì)算操作中包含一下4種:
-
- 約束
- 表達(dá)式
- 表達(dá)式和約束
- 表達(dá)式或約束
10)選擇“表達(dá)式和約束”->單擊表達(dá)式右側(cè)的“...”打開(kāi)表達(dá)式編輯器->寫(xiě)入表達(dá)式"@[User::V]==1"后單擊OK。
11)執(zhí)行包,"Destination"執(zhí)行成功。這是由于表達(dá)式和約束返回的都是True。圖中“fx”表達(dá)優(yōu)先約束中包含有表達(dá)式。
12)右鍵紅色的線->選擇“Success”->將變量V的值改為2,執(zhí)行包,“Destination”沒(méi)有執(zhí)行,因?yàn)楸磉_(dá)式@[User::V]==1返回的結(jié)果是False。
13)打開(kāi)優(yōu)先約束編輯器->修改約束條件為“表達(dá)式或約束”。
14)再次執(zhí)行包,可以看到“Destination”執(zhí)行成功了,因?yàn)榧s束和表達(dá)式是“或”的關(guān)系(True || False = True)
?
轉(zhuǎn)載于:https://www.cnblogs.com/MR-zhang-01/p/9290589.html
總結(jié)
以上是生活随笔為你收集整理的SSIS - 5.优先约束的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 读懂diff
- 下一篇: 关于requestAnimationFr