T-SQL创建简单CTE报错求助:为何出现语法错误?
你的CTE语法错误原因及修正方案
嘿,我一眼就瞅出问题所在啦!你的CTE定义本身是没问题的,但T-SQL对CTE有个硬性要求——定义完CTE之后必须立刻跟上引用它的查询语句,不能就这么戛然而止。你现在的代码只创建了employeecount_CTE这个公共表表达式,却没有任何语句去调用它,这就触发了语法错误。
修正后的完整代码
use AdventureWorks2012 go With employeecount_CTE ([MaritalStatus], totalemployees) as ( select [MaritalStatus], count(*) as totalemployees from [HumanResources].[Employee] group by [MaritalStatus] ) -- 必须加上引用CTE的查询语句,比如查询所有结果 select * from employeecount_CTE;
关键点说明
- CTE本质是临时结果集,它不像临时表可以先创建后使用,必须在定义后的同一条批处理语句里直接引用。
- 如果你需要对这个CTE做更多操作(比如筛选、排序),也可以直接在后续查询里处理,比如:
use AdventureWorks2012 go With employeecount_CTE ([MaritalStatus], totalemployees) as ( select [MaritalStatus], count(*) as totalemployees from [HumanResources].[Employee] group by [MaritalStatus] ) select [MaritalStatus], totalemployees from employeecount_CTE where totalemployees > 100 -- 筛选员工数超过100的婚姻状态 order by totalemployees desc;
内容的提问来源于stack exchange,提问作者The Maestro
相关产品推荐
相关产品推荐

