2

我们在升级到 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”的对象。

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

任何的想法?谢谢!

4

3 回答 3

7

在 SQL Server 2012 中,#temp 表是用负号创建的object_id,因此您的脚本不会按原样工作。最安全的方法是:

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

我在这里写了一篇博客,并且知道它会抓住某人。)

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

于 2012-07-03T13:33:21.930 回答
0

试试这个:

IF OBJECT_ID (N'tempdb..#idstable', N'U') IS NOT NULL
    truncate table #idstable
else
    create table #idstable (id int not null)
于 2012-07-03T13:33:05.177 回答
0

亲爱的,

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

于 2012-07-10T20:35:37.013 回答