0
我有一個asp.net Gridview處理插入操作到SQL數據庫中。只有滿足唯一性標準才允許插入記錄,並且使用SQL服務器中的唯一索引強制執行此限制。如果用戶嘗試插入已存在的記錄,則會顯示錯誤消息。SQL:如果不存在記錄插入記錄的最佳做法
我想知道什麼是實施這一最佳做法。
- 檢查記錄是否存在SQL端,使用IF EXISTS和鎖定提示(updlock,holdlock等)。根據是否插入記錄,將錯誤代碼返回到ASP.net
- 在SQL服務器try/catch塊內執行INSERT操作,依靠唯一索引來防止在記錄存在時發生插入。根據是否引發異常返回錯誤代碼。
- 執行INSERT操作SQL方面,但沒有SQL try/catch。相反,在ASP.net中處理PK違例異常。
通常情況下,我會考慮使用異常來處理有效的操作是不好的做法 - 即軟件不應該拋出異常,除非出現問題。但是,如果SQL中的表上的唯一索引要實現所需的約束,爲什麼還要執行手動檢查記錄的存在?
MERGE在我使用的SQL版本(2005)中不可用,並且我不想更新記錄(如果它已經存在)。如果記錄存在,則會向用戶顯示通知 – Trent
如果您的禁用密鑰選項1有索引,則可能是無此例外且速度最快的最佳方式。 – YvesR
你可以把你的IF EXISTS邏輯放在INSTEAD OF TRIGGER中,並檢查存在與否。你也可以把你的proc做IF EXISTS邏輯,讓INSTEAD OF TRIGGER自動爲你調用。好處是所有嘗試插入的應用程序邏輯都會爲他們設置適當的位置,這樣您就可以一次完成更改並在全球範圍內強制執行。 – Kuberchaun