Je peux choisir parmi une fonction de valeur de tableau paramétrée en U-SQL, mais je ne peux pas l'utiliser dans une APPLICATION CROISEE. Voir @ query1 où je peux faire une sélection de base de mon TVF. Voir @ query3 pour ma solution de contournement en utilisant SQL.MAP. Voir @ query2 qui ne fonctionne pas et est mis en commentaire. Est-ce un modèle pris en charge? L'erreur renvoyée estJe peux SELECT à partir de TVF paramétré en U-SQL mais ne peut pas l'appliquer.
"Erreur C# CS0103: Le nom 'temp' n'existe pas dans le contexte actuel".
DROP FUNCTION IF EXISTS dbo.fn_convert;
CREATE FUNCTION dbo.fn_convert(@temp decimal) /*temp in tenths of a degree Celsius */
RETURNS @result
AS
BEGIN
@result =
SELECT *
FROM(VALUES
("C", @temp/10m) /* Celsius */
,("F", (@temp/10m) * (9m/5m) + 32m) /* Fahrenheit */
,("K", @temp/10m + 273.15m) /* Kelvin */
) AS T([scale], [value]);
RETURN;
END;
@data =
SELECT *
FROM(VALUES
(200), (220), (230)
) AS T(temp);
@query1 =
SELECT *
FROM dbo.fn_convert(200) AS f;
OUTPUT @query1
TO "/Output/test1_fn_convert.csv"
USING Outputters.Csv();
//doesn't work
//@query2 =
// SELECT t.*
// FROM @data
// CROSS APPLY dbo.fn_convert(temp) AS t(scale, temp);
//
//OUTPUT @query2
//TO "/Output/test2_fn_convert.csv"
//USING Outputters.Csv();
@query3 =
SELECT t.*
FROM @data AS d
CROSS APPLY EXPLODE(new SQL.MAP<string, decimal?>{{"C", d.temp/10m}, {"F", (d.temp/10m) * (9m/5m) + 32m}}) AS t(scale, temp);
OUTPUT @query3
TO "/Output/test3_fn_convert.csv"
USING Outputters.Csv();
Merci pour la réponse rapide, Michael! J'ai soumis la demande de fonctionnalité. – Jason