触发器:实际工作中创建脚本时用到的

现在有这样的一个需求:
1. 我需要通过脚本自动创建预约订单,数据存在表CaseRecord中
2. 订单号为一个固定格式自增长的:S16000001~S16009999
3. 这个订单号的后四位是从一个表EntitySerialNo中的CurrentSerialNo字段取值

如果通过页面一步步操作,会自动生成订单号,这样做效率太低。我要做的是通过脚本自动创建订单,然后供后续使用。

我的思路是:
1. 我先查询CaseRecord中订单号的最大值
2. 将这个订单号的后四位分离出来
3. 将分离出来的四位数增加到EntitySerialNo中的CurrentSerialNo的值

现在的问题是:当执行脚本后,没法儿让EntitySerialNo中的CurrentSerialNo的指自动增加,而且还要保证不论是通过脚本创建订单还是通过页面正常创建,这个订单号在两个表中的值是统一的正确的。

那就可以创建一个after触发器,每当insert一条数据后,就自动触发对EntitySerialNo中的CurrentSerialNo的值的更新操作

Here we go!!

自动创建订单的脚本如下:

/*手动创建预约单(待优化)
*/

declare @casecode varchar(50)
declare @casecode1 varchar(50)
declare @casecode2 varchar(50)
declare @StoreId varchar(12)
--set @casecode = (select top 1 CaseCode from CaseRecord order by CaseCode desc)
--set @casecode1 = convert(nvarchar,convert (int,right(@casecode,4)+1)) 

set @casecode2 = (select 'S1600' + convert(nvarchar,convert (int,right(MAX(casecode),4)+1)) from CaseRecord)
set @StoreId = 'NJOP019'

insert CaseRecord 
--values ('S1600'+@casecode2,@StoreId,
values (@casecode2,@StoreId,
1,null,
'couey21','13818386575',
null,convert(varchar(20),getdate(),120),
null,null,'',null,null,null,null,
'00553',null,null,'Very good',
0,null,2,'',5,null,'门店散客',null,null,null,GETDATE(),'00553',GETDATE(),'00553')

接下来,就对EntitySerialNo表创建触发器:


--触发器
ALTER trigger [dbo].[addEntityNo1] on [dbo].[CaseRecord]
--instead of insert
for insert
--after insert
as

declare @casecode varchar(50)
declare @casecode1 varchar(50)
set @casecode = (select top 1 CaseCode from CaseRecord order by CaseCode desc)
set @casecode1 = convert(nvarchar,convert (int,right(@casecode,4))) 

update a set CurrentSerialNo= @casecode1 
from EntitySerialNo a
inner join inserted i on a.EntityName = a.EntityName 
where a.EntityName = 'S'

经过多次修改,成功!!

这里需要注意的是:
1. 注意insert后,EntitySerialNo表的CurrentSerialNo如何自增取值
·

set @casecode = (select top 1 CaseCode from CaseRecord order by CaseCode desc)
set @casecode1 = convert(nvarchar,convert (int,right(@casecode,4))) 

set CurrentSerialNo= @casecode1 
  1. 注意订单号的后四位截取方法:
set @casecode2 = (select 'S1600' + convert(nvarchar,convert (int,right(MAX(casecode),4)+1)) from CaseRecord)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值