2011-10-11 53 views
1

DBCC CHECKIDENT有問題。 我在我的NUnit測試之前清除所有數據庫表,並且需要通過指定Id = 1來添加新用戶。爲此,我需要刪除數據庫中的所有數據,然後重新設置用戶表,以便Id可預測的足以在我的Nunit測試中使用。DBCC CheckIdent現有表格插入+ 1 - 現在不可預測的nunit測試

當我運行以下命令:

DBCC CHECKIDENT ('users', RESEED, 1) 

我得到具有1的ID如果數據庫是在文本燈具安裝之初,重新創建一個新的用戶。但是,如果數據庫已經存在,並且數據被清除,則下一個插入將具有ID爲2的用戶!

我需要重新設置主鍵,無論這是一個新的數據庫,還是預先存在的只有清空的表。

不敢相信這個特性表現出這種行爲,太討厭了!

回答

0

是的,這很煩人。這在新鮮的b-tree上表現不同。解決方案:插入無效的空行。此聲明將崩潰。但它會讓你的計數器工作,因爲你的B型樹不再是空的。

不同的解決方案:做一個截斷表,刪除B樹,並給你一個新的。在你做這件事之前,你需要放棄所有的FK。

另一個:做種子,然後檢查當前身份值是什麼。如果它是錯誤的,再次播種。您可以通過執行「DBCC CHECKIDENT(T,NORESEED)」或通過執行查詢:「從T中選擇最大(id)」來檢查當前值。

另一個:用SMO(.NET)編寫整個數據庫並從腳本創建一個新數據庫。

+0

如何檢查當前身份值?這可能是更好的解決方案。 – jaffa

+0

編輯答案:獲取當前身份值。 – usr

+0

很好,謝謝你的更新。 – jaffa

1

我清除所有數據庫表我的NUnit的測試

那是你真正的問題之前。無論你如何做,你永遠都無法做到。讓你的NUnit測試設置從零開始創建數據庫,使用upgrade scripts

+0

每個測試都會重新創建數據庫嗎?似乎有點沉重的交給我,而且必然會降低性能。想象一下100-1000個測試,全部刪除/重新創建數據庫... – jaffa