Sql server 如何在SQL Server中为更新表创建删除后触发器
我正在尝试创建一个触发器,在删除database.t_用户中的一行时更新database.t_pmessage中的行Sql server 如何在SQL Server中为更新表创建删除后触发器,sql-server,triggers,Sql Server,Triggers,我正在尝试创建一个触发器,在删除database.t_用户中的一行时更新database.t_pmessage中的行 create trigger [dbo].[deleteUser] on [dbo].[t_user] after delete as BEGIN update t_PMmessage set receiverID_FK = null where receiverID_FK IN(SELEC
create trigger [dbo].[deleteUser]
on [dbo].[t_user]
after delete
as
BEGIN
update t_PMmessage set receiverID_FK = null
where receiverID_FK IN(SELECT deleted.userID FROM deleted)
END
但当我从t_用户删除时,我得到以下错误:
After delete触发器在delete语句执行后触发,因此delete语句在建议的触发器中的update语句之前执行,并且您会得到外键约束冲突 取而代之,触发器将触发而不是您发出的delete语句,并将首先更新
t\PMmessage
,然后更新delete语句
还可以使用Exists运算符而不是IN运算符
您需要一个类似于….的而非删除触发器
create trigger [dbo].[deleteUser]
on [dbo].[t_user]
INSTEAD OF DELETE
as
BEGIN
update t_PMmessage
set receiverID_FK = null
where EXISTS (SELECT 1
FROM deleted
WHERE deleted.userID = t_PMmessage.receiverID_FK )
DELETE FROM [dbo].[t_user]
where EXISTS (SELECT 1
FROM deleted
WHERE deleted.userID = [t_user].userID )
END
After delete触发器在delete语句执行后激发,因此delete语句在建议的触发器中的update语句之前执行,并且您得到外键约束冲突 取而代之,触发器将触发而不是您发出的delete语句,并将首先更新
t\PMmessage
,然后更新delete语句
还可以使用Exists运算符而不是IN运算符
您需要一个类似于….的而非删除触发器
create trigger [dbo].[deleteUser]
on [dbo].[t_user]
INSTEAD OF DELETE
as
BEGIN
update t_PMmessage
set receiverID_FK = null
where EXISTS (SELECT 1
FROM deleted
WHERE deleted.userID = t_PMmessage.receiverID_FK )
DELETE FROM [dbo].[t_user]
where EXISTS (SELECT 1
FROM deleted
WHERE deleted.userID = [t_user].userID )
END
对于不需要使用触发器的情况,请在删除集NULL时添加约束
。对于不需要使用触发器的情况,请在删除集NULL时添加约束