SQL Server中的全局临时表

Jee*_*att 3 sql sql-server

我有一个##表,可以在所有会话中访问,但有时我会收到错误

数据库中已经有一个名为"## table"的对象.

为什么以及如何解决它.

Chr*_*ter 5

在这里找到了有趣的参考:

全局临时表的运行方式与本地临时表非常相似 它们是在tempdb中创建的,与永久表相比,锁定和日志记录更少.但是,它们对所有会话都可见,直到创建会话超出范围(并且全局## temp表不再被其他会话引用).如果两个不同的会话尝试上述代码,如果第一个仍处于活动状态,则第二个会话将收到以下内容:

服务器:消息2714,级别16,状态6,行1数据库中已存在名为"## people"的对象.

我还没有看到使用全局## temp表的有效理由.如果数据需要持久化到多个用户,那么至少对我来说使用永久表会更有意义.您可以通过在自动启动过程中创建全局##临时表来使其更加永久,但我仍然无法看到它对永久表的优势.使用永久表,您可以拒绝权限; 您不能拒绝来自全局## temp表的用户.

  • RE:“我还没有看到使用全局 ##temp 表的有效理由”当我希望能够在动态 SQL 中创建表并在外部范围内访问它时,我使用全局临时表。顺便说一下,这篇文章传播了一个古老的神话,即表变量在内存中,#temp 表在磁盘上。在这方面,两者之间真的没有太大(任何?)区别。 (2认同)
  • 我认为不包括第2段,因为它与该问题没有直接关系.第一段确实讨论了Jeevan描述的确切问题. (2认同)