在查询中使用CTE(公用表表达式)

时间:2010-12-10 22:31:27

标签: sql sql-server tsql

with cte as
(
select rowid from batchinfo where datapath like '%thc%'
)

select * from qvalues where rowid in cte

我收到此错误:

  

Msg 102,Level 15,State 1,Line 6   'cte'附近的语法不正确。

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:8)

您正在将CTE视为子查询,而应将其更像是一个表格。

试试这个

;with cte as
(
select rowid from batchinfo where datapath like '%thc%'
)
select * from qvalues 
INNER JOIN cte on cte.rowid=qvalues.rowid

答案 1 :(得分:1)

在Al W的回答(以及Tony的评论)中随便提到。错误被描述为在第6行发生的事实意味着它不是批处理中的第一个语句。这意味着您需要在WITH关键字之前加一个分号:

  

当CTE在作为批处理一部分的语句中使用时,其前面的语句必须后跟分号。

此外,来自Transact-SQL Syntax conventions

  

虽然此版本的SQL Server中的大多数语句不需要分号,但在将来的版本中将需要使用分号。

因此,养成分号的习惯是值得的。