2009-05-05 77 views
1

sql server 2005:我在僱員表中有一個empid與身份on.if如果插入數據到表中時有一些錯誤。身份遞增.i我希望身份只增加如果記錄插入。如果我已經生成emp ID從1到5,然後在第6次記錄插入錯誤ocurrs.and下一個記錄插入標識值將是7我希望它是6.僅當插入記錄時纔會增加身份

回答

2

爲什麼你想這樣做?

標識列只能用作數據庫的「內部管理價值」,它不應該具有「業務價值」,那麼爲什麼這個序列中存在差距很重要?
如果身份正確使用,那麼軟件的用戶將永遠不會面對具有身份值的列;你只是用它來唯一標識一條記錄。

1

我不'我認爲這可以做到。如果你想要你的身份號碼是完全順序的,那麼你可能必須自己生成它們,而不是使用SQL Identity特性。

編輯:即使回滾失敗的交易也不會使身份計數回落,這是設計,請參閱this other question

0

當您需要具備此特定行爲時,您應該使用存儲過程來生成該ID。這樣你可以真正地回滾。但請記住,目前的行爲是有目的的。 當您未在保存當前或下一個ID值的masterdata表中對該id字段使用鎖定時,事務隔離和不同讀取級別(髒讀)很可能會使您陷入麻煩。

1

你有什麼有效的商業理由關心是否存在差距?數據庫沒有任何理由需要關心,而且每一個理由都希望確保身份值不會被重複用於別的東西,因爲它們可能會導致數據完整性的嚴重問題,並且會根據舊報告等查找信息。假設您擁有報告顯示上個月的訂單,然後刪除其中一條記錄,因爲客戶被複制並因此被重複刪除。然後,您重新使用已刪除的重複客戶的身份字段。如果有人在上個月的報告中看到了查找客戶12345的數據,那麼與該品種相關的數據屬於John Smith而不是Sally Jones。這個人不知道,因爲她正在使用一個集合,所以現在她有不正確的信息是完全可以避免的。如果她正在查找已刪除的客戶,則該流程可能會將其重定向到拒絕後的正確客戶。

相關問題