Domanda

C'è un modo per eseguire una funzione scalare valori all'interno di una trasformazione Colonna derivata in SSIS?

-Scenario -

Ho una funzione nel mio DB source che converte i pesi sulla base di un valore di UOM nella colonna UOM del record. Voglio utilizzare questa funzione nel processo di ETL per assicurare che le mie misure di peso sono sempre sterline. Posso chiamare questa funzione all'interno di una colonna derivata? In caso contrario, c'è un altro compito trasformazione ho potuto utilizzare all'interno del flusso di dati (cercando di evitare le colonne di sosta)?

Tavolo dbo.Tasks

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

Tavolo dbo.MeasurementUnits

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

Funzione 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

Esempio chiamata di funzione

dbo.GetConvertedWeight(dbo.Tasks.netWeight, dbo.Tasks.weightUOM, 14) AS netWeight
È stato utile?

Soluzione

No. Che cosa si vorrà è un Comando OLE DB per farlo. Inviare i risultati ad una colonna di output, e la vita dovrebbe essere peachy appassionato per te -. Almeno per quanto riguarda la SSIS

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top