在封裝中使用變數
變數是 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
中的值更新。 如需詳細資訊,請參閱 在指令碼工作中使用變數。
組態和變數
若要動態地更新變數,您可以建立變數的組態,使用封裝部署組態,然後在部署封裝時更新組態檔中的變數值。 在執行階段,封裝會使用更新的變數值。 如需詳細資訊,請參閱 建立封裝組態。