【问题标题】:Not Able to Query Multiple Times from Multiple Common Table Expressions (WITH)?无法从多个公用表表达式(WITH)中多次查询?
【发布时间】:2012-03-16 19:55:46
【问题描述】:

我今天在 T-SQL、SQL-Server-2008 中进行一些查询,偶然发现了一些我不理解的奇怪东西。使用查询窗口,我试图从两个常见的表表达式中进行查询(我删除了很多代码以使其更明显我在做什么):

;WITH temp1 AS (SELECT * FROM dbo.Log)
, temp2 AS (SELECT  * FROM dbo.SignalCodeItems300_tbl)

SELECT * FROM temp1
SELECT * FROM temp2

但是,只有一个 select 语句会运行,即第一个。不管哪个是哪个,只运行第一个。我认为这是我可能缺少的某种语法?我收到错误“无效的对象名称't​​emp2'”。

有人能解释一下这个问题吗?有什么解决方法吗?

【问题讨论】:

    标签: sql sql-server-2008 tsql common-table-expression


    【解决方案1】:

    不,这可以正常工作。 CTE(公用表表达式)仅可用于定义后的第一条语句。所以换句话说,在select * from temp1之后,它们都变得不可用了。

    解决办法是这样的:

    ;WITH temp1 AS (SELECT * FROM dbo.Log)
    SELECT * FROM temp1
    
    ;WITH temp2 AS (SELECT  * FROM dbo.SignalCodeItems300_tbl)
    SELECT * FROM temp2
    

    【讨论】:

      【解决方案2】:

      您可能想看看MSDN documentation

      特别是:

      Multiple CTE query definitions can be defined in a nonrecursive CTE. 
      The definitions must be combined by one of these set operators:
      UNION ALL, UNION, INTERSECT, or EXCEPT.
      

      但是,您不能混合和匹配两种不同的模式,因为这本质上是作为一个查询运行的。

      【讨论】:

        【解决方案3】:

        如果您不想明确重复查询,请使用视图或用户定义的表值函数来容纳查询。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-29
          • 1970-01-01
          • 2021-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-29
          • 1970-01-01
          相关资源
          最近更新 更多