Chiamata di una funzione scalare con valori in SSIS
-
13-09-2019 - |
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
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