Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2012临时表对象\u ID问题_Sql_Sql Server_Sql Server 2012_Temp Tables - Fatal编程技术网

SQL Server 2012临时表对象\u ID问题

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”的对象 这显然不是

我们在升级到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 (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总是正值?这是一个依赖于你仅仅观察到的东西的问题…这是非常不真实的,因为我只需要在表存在时截断它,否则就创建它,这样在最后你就可以确定你有一个空的临时表。