У меня есть вопрос, который возникает, когда я использую предложение 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
[...]
Честно говоря, мне это решение не нравится. У кого-нибудь еще есть лучшая практика для этой проблемы?
Заранее спасибо!