Sql 如何检查插入触发器(如更新触发器)上的列值
我有一个更新触发器,用于更新状态列值更改和更新其他表记录,它工作正常。这是我的密码Sql 如何检查插入触发器(如更新触发器)上的列值,sql,sql-server,triggers,Sql,Sql Server,Triggers,我有一个更新触发器,用于更新状态列值更改和更新其他表记录,它工作正常。这是我的密码 CREATE TRIGGER [dbo].[trgAfterUpdate] ON [dbo].[recharge_request] FOR UPDATE AS DECLARE @status varchar(50); SELECT @status=i.status FROM inserted i; IF UPDATE (status) BEGIN
CREATE TRIGGER [dbo].[trgAfterUpdate] ON [dbo].[recharge_request]
FOR UPDATE
AS
DECLARE @status varchar(50);
SELECT @status=i.status FROM inserted i;
IF UPDATE (status)
BEGIN
IF @status='Failure'
--My Update Statement
ELSE IF @status='Success'
--My Update Statement
END
现在我还想为检查状态列值创建一个插入触发器,并执行其他表操作。因为在某些情况下,状态列值不会更新为,如果列值为“Success
”或“Fail
”,我需要对insert执行一些操作。状态列可能的值为“Success
”、“Fail
”、“Pending
”和“Process
”。任何帮助都将不胜感激。提前谢谢
您没有处理更新多行的情况
您需要将插入的和删除的视为一个可能包含多行的表
IF UPDATE (status)
BEGIN
update t
set ....
from inserted i
inner join some_table t on i.somecol = t.anothercol
where t.status = 'Failure'
update t
set ....
from inserted i
inner join some_table t on i.somecol = t.anothercol
where t.status = 'Success'
. . . . . -- other status value
END
您没有处理更新多行的情况
您需要将插入的和删除的视为一个可能包含多行的表
IF UPDATE (status)
BEGIN
update t
set ....
from inserted i
inner join some_table t on i.somecol = t.anothercol
where t.status = 'Failure'
update t
set ....
from inserted i
inner join some_table t on i.somecol = t.anothercol
where t.status = 'Success'
. . . . . -- other status value
END
我的问题已在这里得到解决,解决方案如下:
CREATE TRIGGER [dbo].[trgAfterInsert] ON [dbo].[recharge_request]
AFTER INSERT
AS
BEGIN
DECLARE @status varchar(50);
SELECT @status=i.status FROM inserted i;
IF @status='Success'
BEGIN
--My Update statement
END
END
我的问题已在这里得到解决,解决方案如下:
CREATE TRIGGER [dbo].[trgAfterInsert] ON [dbo].[recharge_request]
AFTER INSERT
AS
BEGIN
DECLARE @status varchar(50);
SELECT @status=i.status FROM inserted i;
IF @status='Success'
BEGIN
--My Update statement
END
END
感谢squirrel的回复,但我需要(如果更新(状态))操作,因为我必须执行join或Condition无法执行的多个操作。只有当status='Failure'有多个这样的查询并检查status
的diff值时,查询才会执行。感谢squirrel的回复,但我需要类似的(如果更新(状态))操作,因为我必须执行join或condition无法执行的多个操作。只有当status='Failure'有多个这样的查询并检查status的diff值时,查询才会执行