【问题标题】:Real world scenario of using global temp table使用全局临时表的真实场景
【发布时间】:2022-01-18 07:51:24
【问题描述】:
有没有在 SQL Server 中使用全局临时表的真实场景?我了解全局临时表由任何活动的现有连接共享,这意味着它应该由第一个连接会话创建,并在所有连接关闭时自动删除。我在网上搜索了很多关于什么是全局临时表以及如何使用它的信息,但是我找不到任何真实世界的用例。
我问这个问题是因为我正在开发一个 .NET 数据访问库,我想知道是否应该支持全局临时表。全局临时表对我来说听起来有点奇怪,因为它必须由第一个连接创建,并且由于它会在所有连接关闭时自动删除,因此在创建全局临时表时需要检查是否存在。这也可能引入竞争条件。 IMO 永久表更简单,除了全局临时表可能具有一些性能优势,因为它存在于 tempdb 中。
【问题讨论】:
标签:
sql
.net
sql-server
ado.net
【解决方案1】:
我参与的一个项目曾经使用全局临时表进行一次性数据迁移,该迁移涉及在单独的 SSMS 选项卡中按顺序运行多个生成的 SQL 脚本。这些脚本使用全局临时表来共享数据。完成后,关闭选项卡(尤其是创建临时表的选项卡)会安静地清理工作数据。
除此之外,我从未见过它们被使用过。
【解决方案2】:
简答:总会有比使用全局临时表更好的解决方案。
我发现全局临时表的价值的唯一一次是当我尝试生成一个表时,任何坐在与我不同的终端上的人都可以访问该表,并且我不需要担心清理。
我曾经为我的技术含量不高的同事(想想 BA 和 QA)举办每月一次的学习研讨会。为了让他们实时练习并让每个人都能看到彼此的插入、删除和并发问题,我在我们的服务器上创建了全局临时表,这样我们就不会冒在包含真实数据的表上执行的风险。