Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在触发器中使用delete_Sql Server_Triggers - Fatal编程技术网

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我的业务规则如下:如果列中有一个特定值,触发器必须按另一个值修改该值。如果找到其他特定值,触发器必须删除该行。然后,触发器删除的行必须插入到历史记录表中。