在SQL的WHILE循环中使用公共表达式?

4

我如何在while循环中使用公共表达式(CTE)?以下代码在“while”语句和对“cte”的引用处出现错误:

错误:(1)WHILE附近的语法不正确(2)'cte'是无效的对象名称

WITH cte AS (
   SELECT 
     t.employee
   FROM  EmpTable as t
   WHERE (t.status = 3) 
)

WHILE ((SELECT COUNT(*) FROM cte) <> 0)
--more stuff here

2
你想用这个 WHILE 循环做什么?CTE 为你提供了一个数据集 - 你想对它做什么? - marc_s
嗨,我正在尝试分解的代码并不是我的。它(存储过程)充斥着临时表和while循环。在while循环内部,根据正在迭代的第一个结果集,还有更多的临时表和选择操作。我想通过使用CTE来消除临时表来开始分解事物。 - genxgeek
1个回答

3

你不能这样做。CTE的作用域仅限于下一个查询。实际上,它只是在其前面的查询的一部分。就像内联视图(子查询)是较大查询的一部分一样。

在您的情况下,您需要回到老式的临时表、表变量等。


1
最接近的等效物可能是视图,但也许OP误解了CTE的作用。 - Martin Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接