2009-06-12 5 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입니다. 결과를 출력 열로 보내면 최소한 SSIS와 관련하여 인생은 열정적이어야합니다.

+0

작업을 마친 후 (그리고 마지막으로 그 기능을 수정하고 프로 시저로 변경) 마침내이 솔루션을 사용할 수있게되었습니다. 올바른 방향으로 나를 가리켜 주셔서 감사합니다 ;-) – rrydman