在我的查询中实现这个新想法Common Table Expressions
:
SELECT ..... FROM .... WHERE ... IN
(
;with CTEName as
(
CTE syntax goes here
)
SELECT .... FROM CTEName
)
GROUP BY ....
仍然出现以下查询错误:
Msg 102, Level 15, State 1, Line 4
Incorrect syntax near ';'.
Msg 102, Level 15, State 1, Line 14
Incorrect syntax near ')'.
这是CTE的有效用法吗?
感谢。
答案 0 :(得分:5)
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
:< / p>
SELECT *
FROM mytable
WITH q AS (SELECT 1)
SELECT *
FROM q
这里很难定义WITH
在第一个或第二个语句中的使用位置。
因此,最好始终在WITH
前添加分号,以便您可以轻松地将其剪切并粘贴到代码中的任何位置,而不必担心它是否是批处理中的第一个语句