首页 新闻 搜索 专区 学院

简历一个SQL触发器,有时候可以用,有时候不能用 ,不知道什么情况!

0
[待解决问题]
USE [K2_WorkFlow]
GO
/****** Object:  Trigger [dbo].[ServerLog_FlowInst_insert]    Script Date: 2017/4/28 17:35:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER trigger [dbo].[ServerLog_FlowInst_insert]
on [K2_WorkFlow].[dbo].[BPM_FlowInst]
after insert --插入触发
as
 begin
   --定义变量
   declare @ProcInstID int
   --在inserted表中查询已经插入记录信息
   select @ProcInstID=ID from INSERTED
  
   --把K2中流程发起后所有流程插入表中,后期进行数据对比
       insert into [K2_WorkFlow].[dbo].[ProcInstData](ProcInstID,ID,Name,Value)  
      select ProcInstID,ID,Name,Value  from ( select ProcInstID,ID,Name,Value 
             from [K2].[ServerLog].[ProcInstData] 
       where ProcInstID=@ProcInstID  
       --and Value!='' and Name like '%操作人%'  
      ) s
   --print @ProcInstID
 end
SQL
问题补充:

之前遇到这个问题,没有解决出来,今天我再看下这个触发器是成功了,结果过了一会儿我再次执行就不会触发了!不知道什么幺蛾子!

CheneyLi的主页 CheneyLi | 初学一级 | 园豆:114
提问于:2017-04-28 17:36
< >
分享
所有回答(1)
0

触发器不是每插入一行数据,就触发一下,而是,批量插入,只触发一次,所以,你写的这条SQL语句:

select @ProcInstID=ID from INSERTED

只会获取inserted表中的一个ID,而不是所有的ID,可以修改,使[K2].[ServerLog].[ProcInstData] 和 inserted表join

悦光阴 | 园豆:2239 (老鸟四级) | 2017-05-03 15:40
--把K2中流程发起后所有流程插入表中,后期进行数据对比
       insert into [K2_WorkFlow].[dbo].[ProcInstData](ProcInstID,ID,Name,Value)  
      select ProcInstID,ID,Name,Value  from ( select ProcInstID,pd.ID,Name,Value 
             from [K2].[ServerLog].[ProcInstData] pd join INSERTED on pd.ProcInstID=INSERTED.ID
       where 
       --ProcInstID=@ProcInstID  and
        Value!='' and Name like '%操作人%'  
      ) s

现在改成这样貌似也没有效果!

支持(0) 反对(0) CheneyLi | 园豆:114 (初学一级) | 2017-05-05 11:22

@CheneyLi:  在触发器中,对不同的Server中的表进行Join,你查一下MSDN,或许不支持这种写法,你可以写一个简单的测试脚本,不join k2 服务器

支持(0) 反对(0) 悦光阴 | 园豆:2239 (老鸟四级) | 2017-05-05 12:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册