SQL Server使用trigger实现自动填充字段值
用户需要某个字段自动填充,但是如果在SAPB1内使用format search实现,则需要用某个字段进行联动,这种联动是事后的,需要用户点击放大镜来实现,所以抱怨很多。
所以,在数据库中使用trigger来触发是一个好的办法。
1 if (object_id('trigger_PO_Insert', 'tr') is not null) 2 drop trigger trigger_PO_Insert 3 go 4 5 create trigger trigger_PO_Insert 6 on OPOR -- 指定创建触发器的表 7 after insert -- insert 触发器 8 as 9 10 set nocount on; 11 12 declare @IPOX varchar(20), declare @DocEntry int 13 14 select @DocEntry = DocEntry from inserted 15 select @IPOX = 'IPOX' + convert(varchar(20), @DocEntry + 999) --IPOX字符串拼接 16 17 update OPOR set NumAtCard= @IPOX where @DocEntry = DocEntry 18 go
另一个实例,给应收发票自动添加memo
1 if (object_id('trigger_OINV_Insert', 'tr') is not null) 2 drop trigger trigger_OINV_Insert 3 go 4 create trigger trigger_OINV_Insert 5 on OINV -- 指定创建触发器的表 6 after insert ,update-- insert 触发器 7 as 8 9 set nocount on; 10 11 declare @numatcard varchar(100) 12 , @JrnlMemo varchar(100) 13 , @DocEntry int 14 --, @DocName varchar(10) 15 declare @temp01 table( 16 cardcode varchar(100), 17 U_CustomerRefNo varchar(100), 18 U_BatchNo varchar(100) 19 ) 20 21 select @DocEntry 22 = DocEntry from inserted 23 --=10788 24 -- 25 insert into @temp01 26 select '应收发票 - '+ inv1.basecard cardcode,inv1.U_CustomerRefNo,inv1.U_BatchNo 27 from inv1 28 where inv1.DocEntry = @DocEntry /*数据源*/ 29 30 set @numatcard = (select top 1 U_CustomerRefNo from @temp01) 31 32 set @JrnlMemo = ( 33 select 34 top(1) cardcode+'-'+ U_CustomerRefNo+'-'+ 35 stuff(( 36 select '-'+U_BatchNo from @temp01 37 for xml path('')),1,1,'' 38 ) 39 from @temp01 40 ) 41 42 update OINV set JrnlMemo= @JrnlMemo, NumAtCard=@numatcard where @DocEntry = DocEntry 43 go
另一个实例,给应收发票的日记账分录自动添加memo
1 IF OBJECT_ID ('[trigger_OJDT_Insert]','TR') IS NOT NULL 2 DROP TRIGGER [trigger_OJDT_Insert] 3 GO 4 5 CREATE trigger [trigger_OJDT_Insert] 6 on [dbo].[OJDT] -- 指定创建触发器的表 7 after insert ,update-- insert,update 触发器 8 as 9 10 set nocount on; 11 12 declare @Memo varchar(100), @Transid int, @DocNum int 13 , @transtype int, @DocEntry int 14 declare @temp01 table( 15 cardcode varchar(100), 16 U_CustomerRefNo varchar(100), 17 U_BatchNo varchar(100) 18 ) 19 select @Transid = ins.TransId 20 ,@DocNum = ins.BaseRef 21 ,@transtype = ins.TransType 22 from inserted ins 23 inner join oinv oi on oi.docnum = ins.BaseRef 24 25 insert into @temp01 26 select '应收发票 - '+ inv1.basecard cardcode,inv1.U_CustomerRefNo,inv1.U_BatchNo 27 from inv1 28 where inv1.DocEntry = @DocEntry /*数据源*/ 29 30 set @Memo = ( 31 select 32 top(1) cardcode+'-'+ U_CustomerRefNo+'-'+ 33 stuff(( 34 select '-'+U_BatchNo from @temp01 35 for xml path('')),1,1,'' 36 ) 37 from @temp01 38 ) 39 if (@transtype = 13) 40 begin 41 update OJDT set Memo= @Memo where @Transid = TransId 42 --print @Memo 43 end 44 45 go
本文来自博客园,作者:巴拉拉没多少能量,转载请注明原文链接:https://www.cnblogs.com/beishi/p/15841674.html