1

SSIS の派生列変換内からスカラー値関数を実行する方法はありますか?

-シナリオ-

ソース DB に、レコードの UOM 列の UOM 値に基づいて重みを変換する関数があります。この関数を ETL プロセスで利用して、体重測定値が常にポンドであることを確認したいと考えています。派生列内からこの関数を呼び出すことはできますか? そうでない場合、データ フロー内で利用できる別の変換タスクはありますか (列のステージングを回避しようとしています)。

dbo.Tasks テーブル

id |  Name  | netWeight | grossWeight | UOM
12   Task12     30000        50000      10

dbo.MeasurementUnits テーブル

id |   Name    | Shortname | Type | Precision
12  Kilogram    kg          3   10000       
14  Pound       lb          3   10000

dbo.GetConvertedWeight 関数

    ALTER  FUNCTION [dbo].[GetConvertedWeight](@iWeight money, @ifromUOM int, @iToUOM int) 
    RETURNS money
    AS  
    BEGIN 
    DECLARE @lConvertedWeight money, 
            @lKgToGrams money,
            @lLbToGrams money,
            @lOzToGrams money,
            @lWeightInGrams money

    --convert the weight to grams first.
    SELECT @lWeightInGrams = CASE WHEN @iFromUOM = 12 THEN (ISNULL(@iWeight,0) * 1000)
                         WHEN @iFromUOM = 14 THEN (ISNULL(@iWeight,0) * 453.5924)
                         WHEN @iFromUOM = 15 THEN (ISNULL(@iWeight,0) * 28.3495)
                         WHEN @iFromUOM = 13 THEN (ISNULL(@iWeight,0))
                         ELSE ISNULL(@iWeight,0)
                         END

    --Convert the converted weight to grams to the desired weight
    SELECT @lConvertedWeight = CASE WHEN @iToUOM = 12 THEN (ISNULL(@lWeightInGrams,0) / 1000)
                            WHEN @iToUOM = 13 THEN ISNULL(@lWeightInGrams,0)
                            WHEN @iToUOM = 14 THEN (ISNULL(@lWeightInGrams,0)/453.5924)
                            WHEN @iToUOM = 15 THEN (ISNULL(@lWeightInGrams,0) / 28.3495 )
                            ELSE (ISNULL(@lWeightInGrams,0)/453.5924)
                            END
RETURN @lConvertedWeight

関数呼び出しの例

dbo.GetConvertedWeight(dbo.Tasks.netWeight, dbo.Tasks.weightUOM, 14) AS netWeight
4

1 に答える 1

2

いいえ。必要なのは、それを行うためのOLE DB コマンドです。結果を出力列に送信すると、少なくとも SSIS に関しては、あなたの人生は非常に熱心になるはずです。

于 2009-06-12T15:33:10.820 に答える