Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将使用公共表表达式的SQL查询转换为不使用公共表表达式的SQL查询(对于SQL Server 2000)_Sql_Sql Server 2005_Migration_Sql Server 2000 - Fatal编程技术网

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

如何将使用公共表表达式的SQL查询转换为不使用公共表表达式的SQL查询(对于SQL Server 2000),sql,sql-server-2005,migration,sql-server-2000,Sql,Sql Server 2005,Migration,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 * FRO

我刚刚找到了一个适当的解决方案,对存储过程进行了编码,然后了解到数据库被困在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转换为非cte语句的规则。因为可能性太开放了,特别是在使用递归CTE时。我能想到的最接近的方法是将每个CTE按顺序排列,将其分解为自己的查询,并使用它填充一个临时表,该表由以下查询使用。几乎没有效率,也不能保证在所有可能的情况下都能工作。

有两种选择,两者都不好——这就是我们喜欢CTE的原因

选择1

创建一个临时表,或者如果足够小@并像引用CTE一样引用它。完成后放下

选择2 将整个CTE SELECT作为表放入查询的FROM部分

SELECT *
FROM  (SELECT *
       FROM table1) oldCTE

对不起,应该指定没有一个是递归的。约翰,我确信这只是一个疏忽,你引用的帖子中没有一个答案被标记为答案。@RC\u Cleland:这不是疏忽。这篇文章是昨天写的,我还没有机会尝试这些建议。最后期限就是这样。例如,这一期2000年的迁移是在昨天17:08出现的,距离我不得不离开不到一个小时。如果你真的有一个查询要转换,它可能比转换一般的查询更容易,特别是如果您有示例源和结果数据进行验证。很抱歉延迟接受您的答案。我最终得到了临时表格,解决了一个问题。