我試圖做使用Azure的SQL數據庫的一些批處理刪除,我跑的聲明如下:SQL DELETE語句只刪除最後一行
delete from DbRoles where AccountID = 41;
人們預計,所有行帳戶ID是41,但它只從表格中刪除最後一個匹配的行。我發現,這是否使用常規的「其中」語句,以及使用子查詢像
where Id in (select Id from DbRoles where AccountID = 41)
(和Id in (41, 42, 43, ... etc)
也失敗了),沒有人有任何想法,爲什麼這可能是是真的嗎?
----- -----編輯
更多信息回答在評論一些問題: 角色表確實有刪除(感謝小費@Steve福特)觸發我們有一個Closure表連接到角色表,當角色表中發生操作時,它通過觸發器進行更新。其中之一是刪除觸發器,肚裏如下:
CREATE TRIGGER [tr_dbRole_delete]
ON [dbo].[DbRoles]
Instead of DELETE
AS
BEGIN
declare @roleID int;
select @roleID = Id from deleted
--delete self closure
delete from DbRoleClosures
where childID = @roleID and parentID = @roleID
--delete role
delete from DbRoles
where Id = @roleID
END
我認爲,「相反」的聲明可能是我的罪魁禍首,任何人都可以驗證?
我的猜測是,你的要求是不正確的和別的東西是怎麼回事。該語句實際上應該刪除與where子句匹配的所有行。 – wvdz
可能是其他行在其他表中有引用數據。 – Sami
桌子上有觸發器嗎? –