Transact-SQL のWITH句をFROMで使いたい
WITHを使うとSELECT中に出てくる一時テーブル名を使い回せます。
そこで、WITH を使った SELECT の結果テーブル自体を FROM で使いたいと思い次のような、
SELECT * FROM ( WITH HOGE(FUGA) AS ( ... ) SELECT ... ) AS T ...
なんて、SQLを投げると
キーワード 'with' 付近に不適切な構文があります。このステートメントが共通テーブル式または xmlnamespaces 句の場合、前のステートメントをセミコロンで終了してください。
と怒られてしまいます。セミコロンつけたら前のステートメントと分かれてしまうので意味がありません。
これ解決できそうな気もするんですが、見つからない(WITH句って検索キーワードとして使いにくいんですよね)ので、ストアドにしました。SQL Serverだと最後にSELECTされた集合がそのまま帰ってくるので、ストアドの本文をWITH句を使ったSELECTのみにしてしまえば、表として使えます。今回は結果をINSERTしたかったのでストアドでとりあえず回避できました。