TSQL WITH - 第二个引用失败

时间:2014-12-15 17:57:47

标签: sql-server-2008 tsql

SQL Server 2008 R2 - 来自2014 SSMS的查询,但也失败了代码。

奇怪 - 对表B的第一次引用有效,第二次对“无效对象B”进行失败。错误。我究竟做错了什么? GO没有帮助。

        WITH B as (SELECT BatchOutId, SettleMerchantCode, BatchDate, BatchStatusCode, BatchTransCnt, BatchTotAmt, BatchAdjustAmt, BatchAdjustCnt
        FROM     MAF01
        GROUP BY BatchOutId, SettleMerchantCode, BatchDate, BatchStatusCode, BatchTransCnt, BatchTotAmt, BatchAdjustAmt, BatchAdjustCnt)
        SELECT * FROM B ORDER BY BatchOutId DESC
        SELECT * FROM B ORDER BY BatchOutId DESC

3 个答案:

答案 0 :(得分:2)

这是预期的。

CTE仅适用于下一个声明。它们只是命名查询。

您需要

  1. 重复CTE的定义。
  2. 将定义移到视图或内联函数中。
  3. 将结果具体化为临时表。
  4. 取决于您期望发生的事情。

答案 1 :(得分:0)

cte仅对一个查询有效,而不是整个批次。因此,一旦执行了第一个SELECT * FROM B,该查询就完成了。下一个查询不再能够访问第一个查询使用的cte。

答案 2 :(得分:0)

我知道这必须重复

您可以拥有多个CTE,但只能有一个陈述 两个Select是两个语句

如果使用#temp,则可以有多个语句