【问题标题】:Creating temporary view from a temporary table in SQL Server从 SQL Server 中的临时表创建临时视图
【发布时间】:2011-11-03 08:58:58
【问题描述】:

我有一个临时表,我想在这个临时表上创建一个临时视图。

有可能吗?

在下面的示例中,我希望 #Top10Records 成为一个视图而不是一个表格,以便我得到 ​​p>

select * into #Top10Records from (select top 10 * from #MytempTable)

【问题讨论】:

    标签: sql-server view temporary


    【解决方案1】:

    SQL Server 不支持临时视图,正如上面 Daryl 所说,公共表表达式可能是要走的路。但是,CTE 的一个限制是它不能在一个批次中跨多个查询使用。 但是,您可以创建一个标准视图,根据需要使用它,然后在批处理/事务结束时将其删除。 (我知道 OP 的问题是您是否可以创建一个临时视图,但这也可能适用 - 它需要架构更改,但对于所有意图和目的来说都是暂时的)。

    【讨论】:

      【解决方案2】:

      很遗憾,SQL Server 不支持:

      消息 4103,第 15 级,状态 1,第 3 行
      “#someView”:不允许临时视图。
      消息 4508,第 16 级,状态 1,第 6 行
      临时表上不允许使用视图或函数。以“#”开头的表名 表示临时表。

      【讨论】:

        【解决方案3】:

        您可以使用公用表表达式来做到这一点:

        WITH Top10Records  AS 
        ( 
         select top 10 * from #MytempTable
        ) 
        SELECT * FROM Top10Records 
        GO
        

        【讨论】:

        • +1 这可能是最优雅的解决方法 - 良好的响应
        • 当然,这只适用于 CTE 之后的单个语句。我们不知道 OP 是否打算在多个语句中使用临时视图。
        • 它打算被多次使用,因为#MytempTable 会一直在变化
        • 我的解决方法是每次都删除并创建另一个 #Top10Records 临时表。
        • @IanLee 您可以使用 CTE(或多个链接的 CTE)来划分代码,以便更清晰。您可能希望对一个或多个本身由复杂查询产生的查询结果进行复杂查询。与其将所有查询逻辑混在一起,不如将其拆分,以便于理解。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-30
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-10
        相关资源
        最近更新 更多