2010-09-16 51 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});