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

 另一个实例

 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