2012-07-03 110 views
2

我们遇到升级到SQL Server 2012的问题。我正在使用以下脚本来创建临时表,这些临时表用于在SQL Server 2008 R2上正常工作,但现在它在2012年产生错误:SQL Server 2012临时表OBJECT_ID问题

if (OBJECT_ID('tempdb..#idstable') > 0) 
    truncate table #idstable 
else 
    create table #idstable (id int not null) 

抛出的错误是

已经有一个数据库名为 '#idstable' 的对象。

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

有什么想法?谢谢!

回答

7

在SQL Server 2012中,#TEMP表由负object_id创建的,所以你的脚本不会因为是工作。最安全的办法是:(I blogged about this here, and knew it would catch someone

IF OBJECT_ID('tempdb..#idstable') IS NOT NULL 

虽然你的脚本必将失败,无论如何,如果它是一个批次的一部分。解析器不会让你尝试创建两次相同的#temp表。

+0

我只是不知道为什么微软总是会改变这样的事情......谢天谢地! –

+3

@MoslemBenDhaou他们可以改变任何无证的东西。微软有没有告诉过你#temp table object_ids总是正面的?这是一个依赖于你仅仅观察到的东西的问题... –

0

试试这个:

IF OBJECT_ID (N'tempdb..#idstable', N'U') IS NOT NULL 
    truncate table #idstable 
else 
    create table #idstable (id int not null) 
0

我的亲爱的,

此问题是由于truncate语句。截断用于删除保存表的所有记录。使用drop table而不是truncate table,这样可以正常工作;-)

+2

这是不真实的,因为如果它存在,我只需要截断表,否则创建它,所以最后你肯定你有一个空的临时表。 –