Sql server 2008 第二次引用的TSQL失败

Sql server 2008 第二次引用的TSQL失败,sql-server-2008,tsql,Sql Server 2008,Tsql,SQL Server 2008 R2-从2014 SSMS进行查询,但也从代码中失败 奇怪-第一次对表B的引用有效,第二次失败,出现“无效对象B”错误。我做错了什么?走吧,别帮我 WITH B as (SELECT BatchOutId, SettleMerchantCode, BatchDate, BatchStatusCode, BatchTransCnt, BatchTotAmt, BatchAdjustAmt, BatchAdjustCnt FROM

SQL Server 2008 R2-从2014 SSMS进行查询,但也从代码中失败

奇怪-第一次对表B的引用有效,第二次失败,出现“无效对象B”错误。我做错了什么?走吧,别帮我

        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

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

这是意料之中的

CTE仅在下一条语句的范围内。它们只是命名查询

你也需要这样做

  • 重复CTE的定义
  • 将定义移出视图或内联函数
  • 将结果具体化到临时表中

  • 取决于您期望发生的情况。

    我知道这必须是重复的

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


    如果你使用一个#temp,那么你可以有多个语句

    谢谢-我以前使用过两个选择,但它们之间有一个并集。