我刚刚找到了How to Find Rows which are Duplicates by a Key but Not Duplicates in All Columns?的适当解决方案,对存储过程进行了编码,然后了解到数据库停留在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是递归的。
答案 0 :(得分:6)
两个选项(授予,两者都不漂亮 - 这就是我们喜欢CTE的原因)
选项1
创建临时表(#
,或者如果足够小@
)并像CTE那样引用它。完成后放弃。
选项2
将整个CTE SELECT
作为表格放入查询的FROM
部分。
SELECT *
FROM (SELECT *
FROM table1) oldCTE
答案 1 :(得分:3)
我认为不可能提出容易将任何 cte转换为非cte语句的规则。因为可能性太开放(特别是如果你正在使用递归CTE)。我能想到的最接近的是将每个CTE按顺序排除,将其分解为自己的查询,并使用它来填充以下查询使用的临时表。几乎没有效率,也没有在所有可能的情况下工作。