sql server 2005:我在僱員表中有一個empid與身份on.if如果插入數據到表中時有一些錯誤。身份遞增.i我希望身份只增加如果記錄插入。如果我已經生成emp ID從1到5,然後在第6次記錄插入錯誤ocurrs.and下一個記錄插入標識值將是7我希望它是6.僅當插入記錄時纔會增加身份
1
A
回答
2
爲什麼你想這樣做?
標識列只能用作數據庫的「內部管理價值」,它不應該具有「業務價值」,那麼爲什麼這個序列中存在差距很重要?
如果身份正確使用,那麼軟件的用戶將永遠不會面對具有身份值的列;你只是用它來唯一標識一條記錄。
1
我不'我認爲這可以做到。如果你想要你的身份號碼是完全順序的,那麼你可能必須自己生成它們,而不是使用SQL Identity特性。
編輯:即使回滾失敗的交易也不會使身份計數回落,這是設計,請參閱this other question。
0
當您需要具備此特定行爲時,您應該使用存儲過程來生成該ID。這樣你可以真正地回滾。但請記住,目前的行爲是有目的的。 當您未在保存當前或下一個ID值的masterdata表中對該id字段使用鎖定時,事務隔離和不同讀取級別(髒讀)很可能會使您陷入麻煩。
1
你有什麼有效的商業理由關心是否存在差距?數據庫沒有任何理由需要關心,而且每一個理由都希望確保身份值不會被重複用於別的東西,因爲它們可能會導致數據完整性的嚴重問題,並且會根據舊報告等查找信息。假設您擁有報告顯示上個月的訂單,然後刪除其中一條記錄,因爲客戶被複制並因此被重複刪除。然後,您重新使用已刪除的重複客戶的身份字段。如果有人在上個月的報告中看到了查找客戶12345的數據,那麼與該品種相關的數據屬於John Smith而不是Sally Jones。這個人不知道,因爲她正在使用一個集合,所以現在她有不正確的信息是完全可以避免的。如果她正在查找已刪除的客戶,則該流程可能會將其重定向到拒絕後的正確客戶。
相關問題
- 1. 僅當記錄不存在時才插入數據
- 2. 僅當記錄存在或返回null時才加入表?
- 3. 只有當記錄不存在時才插入記錄
- 4. 插入記錄到當列具有身份屬性
- 5. 僅當發生插入時才使用PHP顯示來自MYSQL的記錄
- 6. 僅當表1中存在類似記錄時才插入表2.
- 7. 無插入SQL Server身份列遞增
- 8. 當avaudiorecorder正在記錄時增加uiprogressview
- 9. 只有當現有記錄早於N天時才能插入
- 10. 僅當元素進入視口時纔會加載圖像
- 11. 當插入重複記錄時限制MYSQL的自動增量
- 12. 僅當記錄不存在時插入表格
- 13. 僅當表中的記錄不存在時插入
- 14. 身份插入
- 15. 獲取記錄僅當它加入記錄在其他表
- 16. 只有當Mysql插入新行時,纔會插入新行
- 17. 僅當寫入文件時,babel-node纔會導入錯誤
- 18. OpenLDAP用戶記錄插入用於身份驗證
- 19. 使用插入的記錄的身份,而不commiting
- 20. 能得到一個塊插入記錄的所有身份嗎?
- 21. NHibernate身份插入
- 22. NHibernate不會插入記錄
- 23. SQL - 僅當所有記錄匹配時才更新字段
- 24. 僅當另一列匹配時才更新記錄?
- 25. 僅當有至少30條記錄時才顯示ListView的DataPager
- 26. 返回所有記錄,並且僅當同一記錄中有多個記錄時才顯示1條記錄
- 27. 大查詢 - 僅當列值不存在時才插入
- 28. 僅當'if statment'正確時才插入數據庫
- 29. 僅當兩列關係不重複時才插入表
- 30. 僅當安裝SAN時才允許寫入目錄