使用全局临时表的真实场景

Posted

技术标签:

【中文标题】使用全局临时表的真实场景【英文标题】:Real world scenario of using global temp table 【发布时间】:2022-01-18 07:51:24 【问题描述】:

有没有在 SQL Server 中?我了解全局临时表由任何活动的现有连接共享,这意味着它应该由第一个连接会话创建,并在所有连接关闭时自动删除。我在网上搜索了很多关于什么是全局临时表以及如何使用它的信息,但是我找不到任何真实世界的用例。

我问这个问题是因为我正在开发一个 .NET 数据访问库,我想知道是否应该支持全局临时表。全局临时表对我来说听起来有点奇怪,因为它必须由第一个连接创建,并且由于它会在所有连接关闭时自动删除,因此在创建全局临时表时需要检查是否存在。这也可能引入竞争条件。 IMO 永久表更简单,除了全局临时表可能具有一些性能优势,因为它存在于 tempdb 中。

【问题讨论】:

An interesting use 【参考方案1】:

我参与的一个项目曾经使用全局临时表进行一次性数据迁移,该迁移涉及在单独的 SSMS 选项卡中按顺序运行多个生成的 SQL 脚本。这些脚本使用全局临时表来共享数据。完成后,关闭选项卡(尤其是创建临时表的选项卡)会安静地清理工作数据。

除此之外,我从未见过它们被使用过。

【讨论】:

【参考方案2】:

简答:总会有比使用全局临时表更好的解决方案。

我发现全局临时表的价值的唯一一次是当我尝试生成一个表时,任何坐在与我不同的终端上的人都可以访问该表,并且我不需要担心清理。

我曾经为我的技术含量不高的同事(想想 BA 和 QA)举办每月一次的学习研讨会。为了让他们实时练习并让每个人都能看到彼此的插入、删除和并发问题,我在我们的服务器上创建了全局临时表,这样我们就不会冒在包含真实数据的表上执行的风险。

【讨论】:

以上是关于使用全局临时表的真实场景的主要内容,如果未能解决你的问题,请参考以下文章

sql server中的用户临时表和全局临时表的区别

Oracle 存储过程的全局临时表的替代方法

MySQL创建临时表?

在 oracle 中避免全局临时表的方法

SQL SERVER 临时表能使用EXEC SP_spaceused 查询表大小么

临时表和游标的使用小总结