2014-10-17 194 views
0

如何在刪除行之前檢查行是否可刪除?這就像開發一個新的函數CanDelete(RowID)。SQL Server - 在刪除行之前如何檢查一行可刪除

我在另一個表中引用了這些表中的一些行。

我能做到的一種方法是捕捉異常。有沒有更好的方法?

+1

從根本上說,你不能事先知道事務是否會成功。即使另一個表中沒有行引用給定的行,也可以添加另一行,在您檢查的時間與嘗試刪除的時間之間引用該行。話雖如此,您可以編寫一個查詢來計算另一個表中引用您想要刪除的行的行數,但這不是一個可靠的解決方案(並且可能比僅處理第一個地點)。 – Cameron 2014-10-17 00:28:27

+1

將刪除寫爲存儲過程,或者使用邏輯刪除觸發器來刪除之前檢查外鍵。 – Crowcoder 2014-10-17 00:29:22

回答

0

假設你的要求是你不想刪除一行,它是從另一個表引用。

我不會離開這個到C#代碼。如果另一個應用程序的開發是通過刪除或某人直接訪問數據庫的話。

首先你應該建立一個關於delete rule的關係。其次,您可以在刪除之前編寫觸發器進行檢查,並在其中進行漢德爾。最後,你可以寫你刪除語句與不存在例如

DELETE from TableA where ID in (select ID from tableA a left outer join tableB b on a.ID = b.ID where b.ID is NULL)