スクリプトの1つでWITH句を使用しているときに発生する質問があります。質問は簡単に指摘できます。外部クエリだけでなく、CTEエイリアスを複数回使用したいのですが、核心があります。
例えば:
-- Define the CTE expression
WITH cte_test (domain1, domain2, [...])
AS
-- CTE query
(
SELECT domain1, domain2, [...]
FROM table
)
-- Outer query
SELECT * FROM cte_test
-- Now I wanna use the CTE expression another time
INSERT INTO sometable ([...]) SELECT [...] FROM cte_test
最後の行は外部クエリの外側にあるため、次のエラーが発生します。
メッセージ208、レベル16、状態1、行12無効なオブジェクト名'cte_test'。
CTEを複数回使用する方法はありますか?それを永続的にしますか?私の現在の解決策は、CTEの結果を格納する一時テーブルを作成し、この一時テーブルを以降のステートメントに使用することです。
-- CTE
[...]
-- Create a temp table after the CTE block
DECLARE @tmp TABLE (domain1 DATATYPE, domain2 DATATYPE, [...])
INSERT INTO @tmp (domain1, domain2, [...]) SELECT domain1, domain2, [...] FROM cte_test
-- Any further DML statements
SELECT * FROM @tmp
INSERT INTO sometable ([...]) SELECT [...] FROM @tmp
[...]
率直に言って、私はこの解決策が好きではありません。他の誰かがこの問題のベストプラクティスを持っていますか?
前もって感謝します!