Question

Est-il possible d'exécuter une fonction scalaire à valeur à partir d'une transformation de colonne dérivée en SSIS?

scénario du type -

J'ai une fonction dans ma source DB qui convertit des poids sur la base d'une valeur UOM dans la colonne UOM de l'enregistrement. Je veux utiliser cette fonction dans le processus ETL pour faire en sorte que mes mesures de poids sont toujours livres. Puis-je appeler cette fonction à partir d'une colonne dérivée? Sinon, est-il une autre tâche de transformation que je pourrais utiliser dans le flux de données (tente d'éviter les colonnes de mise en scène)?

table dbo.Tasks

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

table dbo.MeasurementUnits

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

Fonction 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

Exemple appel de fonction

dbo.GetConvertedWeight(dbo.Tasks.netWeight, dbo.Tasks.weightUOM, 14) AS netWeight
Était-ce utile?

La solution

Non. Qu'est-ce que vous voulez est un OLE DB commande pour le faire. Envoyer les résultats à une colonne de sortie et de la vie devrait être vif pour vous Peachy -. Au moins en ce qui concerne SSIS

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top