我只是很好奇,实际上不知道使用 CTE 的缺点是什么?我知道优点,但我只想知道缺点,非常感谢。
我发现 CTE 的一个限制是 CTE 的范围仅限于 cte 定义之后的下一个 sql 语句。
;WITH cte As (SELECT col1,col2, Row_number() over(partition by col3 order by id) as rowNum
FROM table)
SELECT * FROM cte WHERE rowNum=1
SELECT * FROM cte WHERE rowNum >1 -- ERROR occurs as cte defined can be used only uptil next statement of cte definition done by using WITH clause
虽然这是一个老问题,但我已经回答了它,因为除非您是高级 MSSQL 开发人员或遇到过这种情况,否则通常无法获得答案。
与其他数据库中的 CTE 相比,MSSQL 中的 CTE 有一些缺点。 MSSQL CTE 每次用于连接依赖查询时都会进行评估。 在其他数据库中并非如此。因此,CTE 的使用在其他数据库中是最佳的,而不是在 MSSQL 中。在许多情况下,多次评估 CTE 会适得其反。 MSSQL CTE 不像其他数据库那样支持 DISTINCT、GROUP BY
有关更多详细信息以及不同数据库之间的比较,请访问我在 Linkedin 上的博客。
https://www.linkedin.com/pulse/ctesubquery-factoring-optimization-raja-surapaneni-jyjie/