この記事のように、テーブルをパラメーター(2列のテーブル)として受け取り、文字列を出力するUDFがあります。次のように、UDFを複数の列に適用したいテーブルがあります。
Date Unit Line Revenue Orders
4/1/12 D R 20.00 3
4/2/12 D R 25.00 4
4/1/12 H W 33.00 1
4/2/12 H W 35.00 3
このテーブルの最新の日付を持つすべての行でUDFを呼び出し、UDFに、個別のユニットとラインごとに[日付]列と[収益]列を持つテーブルを渡します。また、UDFを呼び出して、個別のユニットとラインごとに日付と注文を渡したいと思います。これはレポートであり、UDFには常に[日付]列と、計算を適用して保存およびレポートする別の列が渡されます。だから私はCROSSAPPLYを含む多くのことを見てきました、そして私はこのようなことをしたいと思います:
SELECT T.unit
, T.line
, dbo.fn_myUDF((SELECT T2.Date, T2.Revenue FROM #Table T2)) as UDFRevenueResult
, dbo.fn_myUDF((SELECT T2.Date, T2.Orders FROM #Table T2)) as UDFOrderResult
FROM #Table T
WHERE T.Date = @ReportDate
これにより、「サブクエリがEXISTSで導入されていない場合、選択リストで指定できる式は1つだけです」というエラーが発生します。CROSS APPLYを見ましたが、これはテーブル変数を返す場合にのみ当てはまるようです。したがって、カーソルとループを使用して、ループの反復ごとにUDFに渡したい各テーブルを作成することで、おそらく自分の質問に答えることができますが、それは正しくないようです。SQL Server 2008でやりたいことを実行する方法を誰かに教えてもらえますか?