加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sql server 这个触发器的问题在哪里?

发布时间:2022-10-30 14:31:11 所属栏目:MsSql教程 来源:网络
导读: Sql server 这个触发器的问题在哪里?
sql-servertsql
Sql server 这个触发器的问题在哪里?,sql-server,tsql,Sql Server,Tsql,我需要你的专家观察才能让这个触发器工作我有3个表,创建事件

Sql server 这个触发器的问题在哪里?

sql-servertsql

Sql server 这个触发器的问题在哪里?,sql-server,tsql,Sql Server,Tsql,我需要你的专家观察才能让这个触发器工作我有3个表,创建事件是主要的,第二个事件状态是状态表Mssq触发器,第三个事件历史记录是“备份表”我只想在状态更新为“已完成”时跟踪每个事件,还想从主表中删除同一行,但在获得跟踪之前,我不想丢失它所以,这就是我正在尝试的…但是它的删除部分不起作用ALTER TRIGGER trgUpdhistory on Events_Status for updateas declare @status varchar(255) BEGIN set xac

我需要你的专家观察才能让这个触发器工作

我有3个表,创建事件是主要的,第二个事件状态是状态表,第三个事件历史记录是“备份表”

我只想在状态更新为“已完成”时跟踪每个事件,还想从主表中删除同一行,但在获得跟踪之前,我不想丢失它

所以,这就是我正在尝试的…但是它的删除部分不起作用

ALTER TRIGGER trgUpdhistory on Events_Status for update    
as  
declare @status varchar(255)  
BEGIN  
set xact_abort on  
    select @status=status from inserted  
if (@status = 'Completed')          
    begin  try        
    begin tran   
 insert into Event_History          
 select * from Create_Event          
 where exists(select * from create_event D left join inserted E on D.ID=E.CE_Ids)        
 delete from Create_Event  
 where exists(select * from create_event D left join deleted E on D.ID=E.CE_Ids)  
COMMIT  
end try          
begin catch    
    ROLLBACK  
    RAISERROR ('Transaction is not completed',16,1)         
end catch           
END

问题是什么?我能看到几个。inserted可以包含多行,因此您希望@status设置为什么?而且exists使用返回到触发器表的左连接进行检查,并且没有尝试将子查询与外部查询中的表关联。我认为,如果条件也将其弄乱,则应该类似于从Create_事件中删除,其中从Create_事件中选择ID中的ID D left join deleted E on D.ID=E.CE_Ids@RAHULSR-这是解决问题的一种方法修复了相关性问题,但只要我们仍然有左join和no where子句,它仍然会从create_事件中提取每一行。此触发器在更新时运行,但似乎设计用于根据更新时插入和删除的伪表中是否存在行来执行操作。它们将同时存在于这两个表中!。是不是也应该在事件状态的插入和删除上运行,或者你有其他触发因素吗?@Damien_The_unsiver ya这就是为什么我说的原因,因为你之前提到过,我认为他应该做一些选择1@status=根据id描述插入订单的状态,但我不确定

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!