SQL Server 2012临时表OBJECT_ID问题

Mos*_*aou 2 sql sql-server temp-tables sql-server-2012

我们在升级到SQL Server 2012时遇到问题.我使用以下脚本创建过去在SQL Server 2008 R2上运行良好的临时表,但现在它在2012年生成错误:

if (OBJECT_ID( 'tempdb..#idstable') > 0)
    truncate table #idstable
else
    create table #idstable (id int not null)
Run Code Online (Sandbox Code Playgroud)

抛出的错误是

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

这显然不是我第一次使用脚本时抛出的(在同一个事务中).

任何的想法?谢谢!

Aar*_*and 7

在SQL Server 2012中,#temp表创建为负数object_id,因此您的脚本将无法正常工作.最安全的方法是:

IF OBJECT_ID( 'tempdb..#idstable') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

(我在这里写了博客,并知道它会抓住某人.)

虽然你的脚本无论如何都会失败,如果它是一个批处理的一部分.解析器不允许您尝试两次创建相同的#temp表.

  • @MoslemBenDhaou他们可以改变任何未记录的内容.微软有没有告诉过你#temp table object_ids总是积极的?这是一个依赖于你只是观察到的东西的问题...... (3认同)