【发布时间】:2010-10-25 03:51:21
【问题描述】:
在 MS-SQL 中是否可以有一个“持久”临时表?我的意思是我目前有一个后台任务,它生成一个全局临时表,它被各种其他任务使用(这就是我将它设为全局的原因)。不幸的是,如果该表未被使用,它会被 SQL 自动删除——这由我的系统优雅地处理,因为它只是将它排队等待再次重建,但理想情况下我希望它每天只构建一次。所以,理想情况下,我可以设置一些超时参数,比如“如果 1 小时内没有任何东西触及它,则删除”。
我真的不希望在我现有的数据库中使用它,因为它会导致更多与管理数据库相关的麻烦(碎片、日志增长等),因为它实际上是汇总数据,仅在 24 小时内有用,并且占用超过 1 GB 的 HD 空间。
在最坏的情况下,我的计划是在与 tempdb 相同的驱动器上创建另一个 DB,将其命名为 PseudoTempDB,然后自己处理删除。
任何见解都将不胜感激!
【问题讨论】:
-
选择 B 计划,自己管理生命周期,仅 SQL Server 无法满足您的要求。
-
我发现这篇文章可能会有所帮助:stackoverflow.com/questions/27835/…
-
kekoav,我的理解是表变量的工作方式与临时表非常相似(就持久性而言)。所以我的假设是一旦我停止访问它,表变量就会消失(就像临时表一样)。
-
标记 Kekoa 分享的帖子 stackoverflow.com/a/27849/77198 指出带有双哈希前缀的表(例如 ##TempTableName)将保留在 tempdb 中。即使在引用或创建它的对象超出范围之后。删除的方法是显式删除表,或者重启数据库实例
-
@BobF for global temp table ## 如果表处于空闲状态并且创建的 sql 实例被销毁,那么它们仅在同一个 sql 实例中持久存在,那么这些表也会被删除。如果我错了,请纠正我
标签: sql sql-server tempdb