DBCC CHECKIDENT有问题。 我在NUnit测试之前清除了所有数据库表,我需要通过指定Id = 1来添加新用户。为此,我需要删除数据库中的所有数据,然后重新设置users表,以便Id可预测足以在我的Nunit测试中使用。
当我运行以下内容时:
DBCC CHECKIDENT ('users', RESEED, 1)
如果在文本夹具设置开始时重新创建数据库,我会得到一个ID为1的新用户。但是,如果数据库已经存在,并且数据已清除,则下一个插入将具有Id为2的用户!!
我需要重置主键,无论这是一个新的数据库还是预先存在的只有清除的表。
不敢相信这个功能表现出这种行为,太烦人了!
答案 0 :(得分:1)
我在NUnit测试之前清除所有数据库表
这是你真正的问题。无论你怎么做,你永远都不会做对。让您的NUnit测试设置使用upgrade scripts从头开始创建数据库。
答案 1 :(得分:0)
是的,这很烦人。这在新鲜的b树上表现不同。解决方案:插入无效的空行。这个陈述会崩溃。但它会使你的计数器工作,因为你的b树不再是空的。
不同的解决方案:执行截断表,删除b树并为您提供一个新的。在执行此操作之前,您需要删除所有FK。
另一个:重新开始,然后检查当前的身份值是什么。如果错了,请重新调整。您可以通过执行“DBCC CHECKIDENT(T,NORESEED)”或执行查询来检查当前值:“从T中选择max(id)。”
另一个:使用SMO(.NET)编写整个数据库的脚本,并从脚本创建一个新的数据库。