我们在升级到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'的对象。
这显然不是我第一次使用脚本时抛出的(在同一个事务中)。
有什么想法吗?谢谢!
答案 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,这样可以正常工作; - )