3

tvf を含む select ステートメントを持つことは可能で、そのパラメーターは CTE 式の結果ですか? これが私のコードです:

 ;with
 date_cte as
 (
    SELECT * FROM ExplodeDates('2012-10-09','2012-10-12')
 )
SELECT * FROM ufn_GET_ATTENDANCE
(
    SELECT QUOTENAME(CONVERT(varchar(10),thedate,120),'''') thedate FROM date_cte
)

このクエリを実行すると、キーワード「SELECT」付近の構文が正しくありませんというエラーが表示されます。および ')' 付近の構文が正しくありません。

可能ですか?または、CTEについて誤解しています。ありがとうございました!

4

2 に答える 2

1

SQLServer バージョンに CTE がある場合は、CROSS APPLY および OUTER APPLY演算子も使用します。

;with date_cte as
 (
  SELECT * FROM ExplodeDates('2012-10-09','2012-10-12')
 )
  SELECT c.*
  FROM date_cte CROSS APPLY ufn_GET_ATTENDANCE(QUOTENAME(CONVERT(varchar(10), thedate, 120), '''')) c

SQLFiddle のデモ

于 2012-11-27T15:28:01.843 に答える
0

ufn_GET_ATTENDANCE がスカラー入力を受け取る場合、内部クエリを括弧で囲んでスカラー値をフィードできます。

;with
 date_cte as
 (
    SELECT * FROM ExplodeDates('2012-10-09','2012-10-12')
 )
SELECT * FROM ufn_GET_ATTENDANCE
(
    (SELECT QUOTENAME(CONVERT(varchar(10),thedate,120),'''') thedate FROM date_cte)
)

ただし、ufn_GET_ATTENDANCEユーザー定義のテーブル型をパラメーターとして受け取るため、CTE の結果を渡すことはできません。EXACT 定義型でない限り、互換性のあるテーブル変数でさえありません。

次の例を参照してください。

create type ud_type as table (A int)
GO
create function table_in(@in ud_type readonly)
returns table as
return select * from @in
GO

declare @tbl ud_type;
select * from table_in(@tbl)
-- ok
GO

declare @tbl table (A int);
select * from table_in(@tbl)
-- Operand type clash: table is incompatible with ud_type:
于 2012-10-09T10:19:39.353 に答える