SQL Server 2012临时表OBJECT_ID问题

时间:2012-07-03 13:27:17

标签: sql sql-server sql-server-2012 temp-tables

我们在升级到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)

抛出的错误是

  

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

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

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:7)

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

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

I blogged about this here, and knew it would catch someone。)

尽管您的脚本无论如何都会失败,但如果它是单个批次的一部分。解析器不允许您尝试两次创建相同的#temp表。

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

亲爱的,

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