U-SQL でパラメーター化されたテーブル値関数から選択できますが、CROSS APPLY では使用できないようです。TVF から基本的な選択を行うことができる @query1 を参照してください。SQL.MAP を使用した回避策については、@query3 を参照してください。機能せず、コメントアウトされている @query2 を参照してください。これはサポートされているパターンですか? 返されるエラーは
「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();