在同一 项目下一期发现:临时表重用。 下面是一个例子“如何重现” :
使用的tempdb
往
创建程序dbo.usp_step_one
作为
动工
创建表#气温(编号中断not null的, num个中断)
修改表#气温地址约束pk_id主键(编号)
插入#气温选择1 , 1
完
往
创建程序dbo.usp_step_two
作为
动工
创建表#气温(编号中断not null的, num个中断)
插入#气温选择1 , 1
完
往
陈动工
exec的dbo.usp_step_one
打印'步骤一1 '
exec的dbo.usp_step_one
打印'步骤一2 '
exec的dbo.usp_step_two
打印'步骤2 1 '
凯明
往
降程序dbo.usp_step_one
降程序dbo.usp_step_two
往
2000年将进程的sql这批没有错误,但数据库2005年将得到您的结果如下:
步骤1 1
讯息2714 ,层级16 ,状态4 ,程序usp_step_one , 6号线
已经有一个对象命名为' pk_id '在数据库中。
味精1750年,层级16 ,状态0 ,程序usp_step_one , 6号线
无法创建约束。 见以前的错误。
问题是在临时表缓存在交易。 在sql 2000年它一直使用当地的气温将下降表格 , 尽快为他们摆脱范围。 在sql 2005年,下降是推迟到了交易(回滚/承诺) 。 你可以找到一些更详细的气温表缓存这里 。 作为一种替代方法 , 您可以:
- 使用表变量不是临时表
- 避免命名约束建立临时物件如
创建表#气温(编号中断not null的主键集群, num个中断)