在封裝中使用變數

變數是 Integration Services 套件的實用且彈性的新增專案;它們可以在封裝中的物件之間,以及在父封裝和子封裝之間提供通訊。 變數還可用於運算式和指令碼。

使用者自訂變數和系統變數

Integration Services 提供系統變數,並支援使用者定義的變數。 當您建立新的封裝、將容器或工作新增至封裝,或建立事件處理常式時,Integration Services 會包含一組容器的系統變數。 系統變數包含關於封裝、容器、工作或事件處理常式的有用資訊。 例如,在執行階段, MachineName 系統變數包含在其上執行封裝的電腦名稱和封裝執行開始時間 StartTime 。 系統變數是唯讀的。 如需詳細資訊,請參閱 系統變數

您可以建立使用者自訂變數,然後將其用於封裝。 使用者定義變數可在 SSIS 中使用許多方式:在腳本中;在優先順序條件約束、For 迴圈容器、衍生資料行轉換和條件式分割轉換所使用的運算式中;和 在更新屬性值的屬性運算式中。

例如,您可以在「For 迴圈」容器的評估條件中,使用使用者自訂變數。 您還可以將「Foreach 迴圈」容器中的列舉值集合值對應至變數,如果「執行 SQL」工作使用參數化 SQL 陳述式,則可將陳述式的參數對應到變數。 如需詳細資訊,請參閱 Integration Services (SSIS) 變數

變數使用方式案例

變數在 Integration Services 套件中有許多不同的使用方式。 在您將使用者自訂變數新增至封裝,實作方案所需的彈性和可管理性之前,您可能會覺得封裝開發沒有太多的進展。 視案例而定,也常會使用系統變數。

屬性運算式 :使用變數在設定封裝和封裝物件屬性的屬性運算式中提供值。 例如, SELECT * FROM @varTableName 運算式會包含更新「執行 SQL」工作所執行之 SQL 陳述式的 varTableName 變數。 DATEPART("d", GETDATE()) == 1? @[User::varPackageFirst]:@[User::varPackageOther]" 運算式會在該月的第一天執行 varPackageFirst 變數中指定的封裝,並在其他日子執行 varPackageOther 變數中指定的封裝,來更新「執行封裝」工作所執行的封裝。 如需詳細資訊,請參閱 在封裝中使用屬性運算式

資料流程運算式 :使用變數在運算式中提供值,「衍生的資料行」和「條件式分割」轉換會使用這些運算式擴展資料行,或將資料列導向不同的轉換輸出。 例如, @varSalutation + LastName運算式會串連 VarSalutation 變數和 LastName 資料行中的值。 Income < @HighIncome 運算式會將 Income 資料行中、值小於 HighIncome 變數中的值的資料列導向輸出。 如需詳細資訊,請參閱衍生的資料行轉換條件式分割轉換Integration Services (SSIS) 運算式

優先順序條件約束運算式:提供要在優先順序條件約中使用的值,決定受條件約束的可執行檔是否執行。 這些運算式可以和執行結果 (成功、失敗、完成) 一起使用,或取代執行結果。 例如,如果 @varMax > @varMin 運算式評估為 true,可執行檔就會執行。 如需詳細資訊,請參閱 將運算式加入優先順序條件約束

參數和傳回碼 :提供值給輸入參數,或儲存輸出參數和傳回碼的值。 您可以將變數對應到參數和傳回值來完成這個動作。 例如,如果您將 varProductId 變數設為 23 並執行 SELECT * from Production.Product WHERE ProductID = ?SQL 陳述式,查詢就會擷取 ProductID 為 23 的產品。 如需詳細資訊,請參閱 執行 SQL 工作執行 SQL 工作中的參數和傳回碼

For 迴圈運算式 :提供要在「For 迴圈」的初始化、評估和指派運算式中使用的值。 例如,如果 varCount 變數為 2 且 varMaxCount 為 10、初始化運算式為 @varCount、評估運算式為 @varCount < @varMaxCount 且指派運算式為 @varCount =@varCount +1,則迴圈會重複執行 8 次。 如需詳細資訊,請參閱 For 迴圈容器為止。

父封裝變數組態 :將值從父封裝傳遞到子封裝。 子封裝可以使用父封裝變數組態存取父封裝中的變數。 例如,如果子封裝必須使用和父封裝相同的日期,子封裝就可以定義父封裝變數組態,指定由父封裝中之 GETDATE 函數設定的變數。 如需詳細資訊,請參閱 執行封裝工作封裝組態

指令碼工作和指令碼元件 :提供唯讀和讀取/寫入變數的清單到「指令碼」工作或「指令碼」元件、更新指令碼中的讀取/寫入變數,然後在指令碼內或指令碼外使用更新的值。 例如,在程式碼 numberOfCars = CType(Dts.Variables("NumberOfCars").Value, Integer)中,指令碼變數 numberOfCars 會由變數 NumberOfCars中的值更新。 如需詳細資訊,請參閱 在指令碼工作中使用變數

組態和變數

若要動態地更新變數,您可以建立變數的組態,使用封裝部署組態,然後在部署封裝時更新組態檔中的變數值。 在執行階段,封裝會使用更新的變數值。 如需詳細資訊,請參閱 建立封裝組態

若要加入、修改和刪除使用者自訂變數