繁体   English   中英

如何使用公用表表达式将SQL查询转换为一个(对于SQL Server 2000)

[英]How to Convert a SQL Query using Common Table Expressions to One Without (for SQL Server 2000)

我刚刚找到了一个适当的解决方案, 如何找到所有列中按键重复但不重复的行? 编码存储过程,然后了解到数据库卡在SQL Server 2000上。

当然,我的解决方案很大程度上依赖于公用表表达式。

任何人都可以为我提供一套转换回SQL Server 2000方言的文件吗?

请注意,我有像这样的东西:

;
WITH CTE1 AS ( ... ),
CTE2 AS (SELECT ... FROM CTE1 ... ),
CTE3 AS (SELECT ... FROM CTE1 INNER JOIN CTE2 ...)
SELECT * FROM CTE3
WHERE criteria
ORDER BY sequence

这似乎会让事情变得更有趣......


更新:没有CTE是递归的。

两个选项(授予,两者都不漂亮 - 这就是我们喜欢CTE的原因)

选项1

创建临时表( # ,或者足够小@ )并像CTE一样引用它。 完成后放弃。

选项2将整个CTE SELECT作为表放在查询的FROM部分中。

SELECT *
FROM  (SELECT *
       FROM table1) oldCTE

我不认为有可能提出容易将任何 cte转换为非cte语句的规则。 因为可能性太开放(特别是如果你正在使用递归CTE)。 我能想到的最接近的是将每个CTE按顺序排除,将其分解为自己的查询,并使用它来填充以下查询使用的临时表。 几乎没有效率,也没有在所有可能的情况下工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM