2010-09-16 40 views
0

我有一套已创建的数据库单元测试。为了复制我部署到的任何计算机上的所有测试,可以使用脚本来删除数据库并重新创建它。除第一次测试外,测试将适用于所有单元测试。检查数据库单元测试的新表的标识

第一次测试失败的原因是,我在每次测试之前执行“dbcc checkident”命令并重置所有身份以确保所有身份都相同。在一个从未插入,然后具有“dbcc checkident”的新表上运行时,身份从0开始插入而不是1。

如果我使用其他内置命令检查身份在新表中,他们返回0作为身份。检查“dbcc checkident”的好处是,如果一行从未插入到标识中,则标识返回为“NULL”。只有“dbcc checkident”通过打印消息告诉我们并且不容易被测试。

如何验证我是否需要通过数据库命令重置身份而不插入行,删除它,然后重置仅仅是为了避免身份在第一条记录上脱落?

上插入行后插入在新鲜表中的行,而不运行“DBCC CHECKIDENT”和设置同一性0 = 1

标识之后插入到表

身份的实施例一个新表和正在运行“dbcc checkident”并将标识设置为0 = 0

在现有表的行上插入标识已将其插入并运行“dbcc checkident”并将标识设置为0 = 1

回答

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});