Я могу выбрать из параметризованной функции значения таблицы в U-SQL, но я не могу использовать ее в CROSS APPLY. См. @ Query1, где я могу сделать основной выбор из моего TVF. См. @ Query3 для моего обходного пути с использованием SQL.MAP. См. @ Query2, который не работает и закомментирован. Является ли это поддерживаемым шаблоном? Возвращаемая ошибка:Я могу SELECT из параметризованного TVF в U-SQL, но не могу CROSS APPLY
«Ошибка C# CS0103: имя« temp »не существует в текущем контексте».
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();
Спасибо за быстрый ответ, Майкл! Я отправил запрос функции. – Jason