WITH CTEName as
(
-- CTE syntax goes here
)
SELECT *
FROM mytable
WHERE myfield IN
(
SELECT ctefield
FROM CTEName
)
GROUP BY
myotherfield
Другими словами, CTE
должен быть определен перед всеми другими командами (как если бы они были фактическими таблицами).
Также обратите внимание, что точка с запятой (;
) обычно не требуется,Однако синтаксис CTE
был реализован в SQL Server
после того, как он уже ввел ключевое слово WITH
для своих собственных целей, поэтому неявное разбиение операторов больше не работает с CTE
:
SELECT *
FROM mytable
WITH q AS (SELECT 1)
SELECT *
FROM q
Трудно определить, где WITH
используется в первом или втором выражении здесь.
Поэтому рекомендуется всегда ставить перед точкой WITH
точку с запятой, чтобы ее можно было легко вырезать и вставить.в любом месте вашего кода, не беспокоясь о том, является ли это первым оператором в пакете или нет.