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语句:
select @ProcInstID=ID from INSERTED
只会获取inserted表中的一个ID,而不是所有的ID,可以修改,使[K2].[ServerLog].[ProcInstData] 和 inserted表join
--把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
现在改成这样貌似也没有效果!
@CheneyLi: 在触发器中,对不同的Server中的表进行Join,你查一下MSDN,或许不支持这种写法,你可以写一个简单的测试脚本,不join k2 服务器