運算式中的 Integration Services 資料類型
運算式評估工具使用 Integration Services 資料類型。當資料初次進入 Integration Services 封裝中的資料流程時,資料流程引擎會將所有資料行的資料轉換成 Integration Services 資料類型,而運算式所使用的資料行資料已為 Integration Services 資料類型。「條件式分割」和「衍生的資料行」轉換中使用的運算式可參考資料行,因為它們是包含資料行資料的資料流程中的一部分份。
運算式亦可使用變數。變數的資料類型為 Variant,且運算式評估工具會先將變數的資料類型從 Variant 子類型轉換成 Integration Services 資料類型,然後才評估運算式。變數只能使用 Integration Services 資料類型的子集。例如,變數無法使用「二進位大型物件區塊」(Binary Large Object Block,BLOB) 資料類型。
如需 Integration Services 資料類型,以及將 Variant 資料類型對應到 Integration Services 資料類型的詳細資訊,請參閱<Integration Services 資料類型>。
此外,運算式還可包含字串、布林,以及數值常值。運算式評估工具會固定將字串常值轉換為 DT_WSTR 資料類型,以及將布林常值轉換為 DT_BOOL 資料類型。運算式評估工具會將所有加上引號的值解譯為字串。數值常值會轉換為其中一種數值 Integration Services 資料類型。如需將數值常值轉換為數值 Integration Services 資料類型的詳細資訊,請參閱<常值 (SSIS)>。
[!附註]
布林值是邏輯值,而非數字。雖然布林值可以在某些環境下顯示為數字,但不會儲存為數字,而且不同的程式設計語言將布林值表示成數值的方式各有不同,.NET Framework 方法也是如此。
例如,Visual Basic 提供的轉換函數會將 True 轉換為 -1;然而 .NET Framework 中的 System.Convert.ToInt32 方法卻將 True 轉換為 +1。Integration Services 運算式語言會將 True 轉換為 -1。
若要避免錯誤或非預期結果,您所撰寫的程式碼不應該以特定數值表示 True 和 False。您應該盡可能將布林變數的使用限制在當初所設計的邏輯值上。
運算式中所用資料的需求
運算式評估工具支援所有的 Integration Services 資料類型。不過,根據運算和函數而定,運算元和引數會需要特定資料類型。運算式評估工具對於運算式中使用的資料,有下列資料類型需求的規定︰
邏輯運算中使用的運算元評估結果必須為布林。例如,ColumnA > 1&&ColumnB < 2。
數學運算中使用的運算元評估結果必須為數值。例如,23.75 * 4。
比較運算中使用的運算元 (例如邏輯和等式運算) 必須評估為相容的資料類型。
例如,下列範例中的其中一個運算式使用 DT_DBTIMESTAMPOFFSET 資料類型:
(DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" != (DT_DBDATE)"1999-10-12"
系統會將運算式 (DT_DBDATE)"1999-10-12" 轉換為 DT_DBTIMESTAMPOFFSET。轉換的運算式會變成 "1999-10-12 00:00:00.000 +00:00" (不等於其他運算式 (DT_DBTIMESTAMPOFFSET,3) "1999-10-11 20:34:52.123 -3:30" 的值),因此,此範例會評估為 TRUE。
傳遞至數學函數的引數評估結果必須為數值資料類型。根據函數或運算而定,可能會需要特定的數值資料類型。例如,HEX 函數需要帶正負號或不帶正負號的整數。
傳遞至字串函數的引數評估結果必須為字元資料類型︰DT_STR 或 DT_WSTR。例如,UPPER("flower")。某些字串函數 (例如 SUBSTRING) 的起始位置和字串長度需要額外的整數引數。
傳遞至日期和時間函數的引數評估結果必須為有效的日期。例如,DAY(GETDATE())。某些函數 (例如 DATEADD) 針對其加入至日期的日數,需要額外的整數引數。
結合不帶正負號八位元組整數和帶正負號整數的運算需要明確轉換,才能明定結果格式。如需詳細資訊,請參閱<轉換 (SSIS 運算式):轉換 SSIS 資料類型>。
許多運算和函數的結果都需要預定的資料類型。此資料類型可能是引數的資料類型,或運算式評估工具轉換結果的資料類型。例如,邏輯 OR 運算子 (||) 的結果固定為布林、ABS 函數的結果為引數的數值資料類型,而乘法的結果為可保留結果且不會遺失的最小數值資料類型。如需有關結果資料類型的詳細資訊,請參閱<運算子 (SSIS 運算式)>和<字串函數和其他函數 (SSIS 運算式)>。
外部資源
pragmaticworks.com 上的技術文章:SSIS Expression Cheat Sheet。
social.technet.microsoft.com 上的技術文章:SSIS 運算式範例。