2009-06-12 102 views
1

是否有任何方法可以在SSIS中的派生列转换中执行标量值函数?在SSIS中调用标量值函数

-Scenario-

我有一个函数在我的源数据库,其将基于记录的计量单位列中的计量单位值的权重。我想在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这样做。将结果发送到输出列,并且生活应该对你很敏感 - 至少在SSIS方面。

+0

经过数小时的工作(最后只是修改该功能并将其更改为一个过程),我终于得到了此解决方案的工作。感谢您指点我正确的方向;-) – rrydman 2009-06-12 19:52:23