SQL Server 2012临时表对象\u ID问题
我们在升级到SQL Server 2012时遇到问题。我正在使用以下脚本创建临时表,这些临时表过去在SQL Server 2008 R2上工作正常,但现在它在2012中生成错误:SQL Server 2012临时表对象\u ID问题,sql,sql-server,sql-server-2012,temp-tables,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”的对象 这显然不是
if (OBJECT_ID( 'tempdb..#idstable') > 0)
truncate table #idstable
else
create table #idstable (id int not null)
抛出的错误是
数据库中已存在名为“#idstable”的对象
这显然不是我第一次使用脚本(在同一事务中)时抛出的
有什么想法吗?谢谢大家! 试试这个:
IF OBJECT_ID (N'tempdb..#idstable', N'U') IS NOT NULL
truncate table #idstable
else
create table #idstable (id int not null)
在SQL Server 2012中,临时表是使用负的对象id创建的,因此脚本无法正常工作。最安全的方法是:
IF OBJECT_ID( 'tempdb..#idstable') IS NOT NULL
()
尽管您的脚本注定会失败,但前提是它是单个批处理的一部分。解析器不会让您尝试创建同一个临时表两次。亲爱的
此问题是由于truncate语句引起的。Truncate用于删除保留表的所有记录。使用drop table而不是truncate table,这样可以很好地工作;-) 我只是无法找到一个很好的理由来解释为什么微软总是这样改变。。。谢谢你,伙计@穆斯林说他们可以改变任何未经记录的事情。微软有没有告诉过你,临时表对象ID总是正值?这是一个依赖于你仅仅观察到的东西的问题…这是非常不真实的,因为我只需要在表存在时截断它,否则就创建它,这样在最后你就可以确定你有一个空的临时表。