Sql server 如何在触发器中使用delete
我必须手动使用删除操作Sql server 如何在触发器中使用delete,sql-server,triggers,Sql Server,Triggers,我必须手动使用删除操作 delete from t where=col=1,因为如果我将它插入触发器中,它将不起作用。即,删除操作不会保存到deleted表中 alter trigger trig1 on t after insert,delete as set col = case when col1=1.8 then 2 delete from t where col=1; insert into history(col,col1) select * from deleted 表历史
delete from t where=col=1
,因为如果我将它插入触发器中,它将不起作用。即,删除操作不会保存到deleted
表中
alter trigger trig1 on t
after insert,delete as
set col = case when col1=1.8 then 2
delete from t where col=1;
insert into history(col,col1)
select *
from deleted
表历史记录没有得到插入。最好的方法是将要执行的三件事分成三部分,两个触发器和一个存储过程
create trigger trig1 on t
after insert as
set col = case when col1=1.8 then 2
create procedure p(@t sysname) as
begin
if exists (select * from t where col=1)
delete from t where col=1;
end
create trigger trig2 on t
after delete as
insert into history(col,col1)
select *
from deleted
插入值时必须执行
p
。您的问题非常不清楚。我没有看到更新。为什么需要更新插入到的同一个表???清楚地解释一下你需要做什么会对我们有帮助,但更重要的是,这会有帮助,因为你似乎不太确定它需要做什么。-1个问得很糟糕的问题。一点也不清楚你是什么after@SeanLange因为我插入的值会随着时间的推移而变化,因此我建立了更新,插入的值不是常量。在我的原始表中,有一种情况是,当一行接受一个值时,必须删除该行。因此,我希望条件下的行被自动删除,我不必这样做。当然,您不需要插入常量值。那有什么意义?你又提到更新…你在更新什么?不确定哪种奇怪的业务规则会声明,如果一行有某个值,它应该被更新。为什么不阻止该值进入表中?您需要提供更多的详细信息,才有人能在这里为您提供更多帮助。@SeanLange我的业务规则如下:如果列中有一个特定值,触发器必须按另一个值修改该值。如果找到其他特定值,触发器必须删除该行。然后,触发器删除的行必须插入到历史记录表中。