2009-06-12 8 views
1

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

-Scenario-

私はレコードのUOM欄のUOM値に基づいて重みを変換し、私のソースDB内の関数を持っています。私は、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 

答えて

2

いいえ。あなたが望むことはOLE DB Commandです。結果をOutput Columnに送ってください。少なくとも、SSISに関しては、人生はあなたにとって熱心であるはずです。

+0

作業の時間を経て(そして最後にその関数を変更して手続きに変更する)、私はついにこの解決策を得ました。私を正しい方向に向けることに感謝します;-) – rrydman

関連する問題