【问题标题】:Stored procedure deleting temporary table存储过程删除临时表
【发布时间】:2016-07-01 10:55:29
【问题描述】:

我有一个存储过程,它使用了一个带有##temp 的临时表,使用select * into ##temp from tablename 即时创建。

我遇到的问题是,尽管## 是全局的,据我所知,其他用户可以使用它,但这个存储过程似乎只在查询运行的那一刻删除或使其可用.

我正在使用 SSRS 提取存储过程并使用从该报告中钻取到同一个报告,第一个报告仅显示图表,第二个报告是相同的存储过程,它通过参数使用操作链接,但第二个报告无法识别 ##temp 表。

现在您已经了解了背景,是否有解决此问题的方法或更好的方法,请记住,我们目前没有数据仓库,因此只需使用临时表来解决此问题。

谢谢

【问题讨论】:

  • 如果要持久化表,请使用真实表而不是临时表。此外,您的 SP 将只运行一次,并且由于表已经存在,后续运行将失败。使用INSERT INTO ... SELECT ... 而不是SELECT ... INTO ..。
  • 同意@ChrisPickford。这是temp tables 上的文档。有一个部分(大约一半,标题为 临时表)详细说明了您何时可以预期临时表离开范围并变得不可用。
  • 谢谢克里斯,我的老板提到了一些关于属于客户端的 SQL 服务器,所以不要创建表,但我想视图也可以正常工作,对吧?没有相同的含义
  • 视图只是对现有表的查询,因此在这种情况下没有用处。如果你需要持久化数据,那么你需要创建一个表。如果您有其他用例,那么您将需要一种不同的方法来解决您的问题。
  • 嗯...我们需要那个数据仓库,也许是最好的前进方式

标签: sql-server stored-procedures reporting-services


【解决方案1】:

来自MSDN:

当创建表的会话结束并且所有其他任务都停止引用它们时,会自动删除全局临时表。任务和表之间的关联仅在单个 Transact-SQL 语句的生命周期内维护。这意味着在创建会话结束时主动引用该表的最后一个 Transact-SQL 语句完成时将删除全局临时表。

如果您拥有服务器的管理员权限,请尝试this answer。

【讨论】:

    猜你喜欢
    • 2021-11-10
    • 2011-01-17
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多