在封裝中使用變數

變數是 Integration Services 封裝之有用的彈性附加項目,可提供在封裝的物件間和父子封裝之間的通訊。變數還可用於運算式和指令碼。

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

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

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

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

變數使用方式案例

變數在 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 變數中的值的資料列導向輸出。如需詳細資訊,請參閱<衍生的資料行轉換>、<條件式分割轉換>與<在封裝中使用運算式>。

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

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

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

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

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

組態和變數

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

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

Integration Services 圖示 (小) 掌握 Integration Services 的最新狀態

若要取得 Microsoft 的最新下載、文件、範例和影片以及社群中的選定解決方案,請瀏覽 MSDN 或 TechNet 上的 Integration Services 頁面:

若要得到這些更新的自動通知,請訂閱該頁面上所提供的 RSS 摘要。