我创建了一套数据库单元测试。为了在我部署到的任何机器上复制所有测试,有一些脚本可以删除数据库并重新创建它。除第一次测试外,该测试适用于所有单元测试。
第一次测试失败的原因是我在每次测试之前执行“dbcc checkident”命令并重置所有身份以确保所有身份都相同。在一个从未插入的新表中,然后对其运行“dbcc checkident”,当插入而不是1时,标识从0开始。
如果我使用其他一些内置命令检查新表中的身份,则返回0作为标识。检查“dbcc checkident”的好处是,如果从未插入行,则标识将返回为“NULL”。只有“dbcc checkident”通过打印消息告诉我们,并且无法轻松测试。
如何在不插入行,删除行,然后重置以避免身份在第一条记录上下载的情况下,验证我是否需要通过数据库命令重置身份?
插入表格的示例
在新表上插入行而不运行“dbcc checkident”并将标识设置为0 = 1
之后的标识在新表上插入行并运行“dbcc checkident”并将标识设置为0 = 0后的标识
在已插入并运行“dbcc checkident”并将标识设置为0 = 1的现有表上插入行后的标识
答案 0 :(得分:1)
要在新表上解决“dbcc checkident”的身份插入问题,这就是我所做的。
使用sys表我能够通过sql手动检查最后一个标识值。如果重置了最后一个标识,它将最后一个值更改为0.在一个从未插入到最后一个标识的新表中将为空。
以下是我们使用的代码段。这将允许您在不执行插入,删除,重置标识的情况下检查最后一个标识。
-- {0} is your table name
-- {1} is your identity value of the reset
IF EXISTS (SELECT null FROM sys.identity_columns WHERE OBJECT_NAME(OBJECT_ID) = '{0}' AND last_value IS NOT NULL)
DBCC CHECKIDENT ({0}, RESEED, {1});