我有一个##表格,可以在所有会话中访问,但有时会出现错误。
数据库中已经存在一个名为'##table'的对象。
为什么会出现这种情况,如何解决。
我有一个##表格,可以在所有会话中访问,但有时会出现错误。
数据库中已经存在一个名为'##table'的对象。
为什么会出现这种情况,如何解决。
发现了一个有趣的参考资料(已删除引用现在是恶意网站的过时URL):
全局临时表的操作方式与本地临时表类似;它们在tempdb中创建,导致的锁定和日志记录比永久表少。然而,它们对所有会话都可见,直到创建会话超出范围(并且其他会话不再引用全局##temp表)。如果两个不同的会话尝试上述代码,则如果第一个仍然处于活动状态,则第二个将收到以下消息:
服务器:Msg 2714,级别16,状态6,行1 数据库中已经存在名为“##people”的对象。
我还没有看到使用全局##temp表的有效理由。如果数据需要持续存在于多个用户中,则至少对我来说,使用永久表更有意义。您可以通过永久表拒绝权限;您无法拒绝用户从全局##temp表中访问。
There is already an object named '##table' in the database.
如果您执行CREATE TABLE语句,而数据库中已经存在'##table',则通常会出现此错误。
在您的代码中,可能会再次调用创建此全局表的CREATE TABLE逻辑,导致出现此错误。
您是否有导致此错误的确切语句的详细信息?
if object_id('tempdb..##table') is null begin
--create table ##table...
end
我从谷歌上找到了一篇非常有趣的文章,介绍了如何检查临时表的存在性。文章链接:http://sqlservercodebook.blogspot.com/2008/03/check-if-temporary-table-exists.html