触发器:实际工作中创建脚本时用到的
2016-07-13 19:56
330 查看
现在有这样的一个需求:
1. 我需要通过脚本自动创建预约订单,数据存在表CaseRecord中
2. 订单号为一个固定格式自增长的:S16000001~S16009999
3. 这个订单号的后四位是从一个表EntitySerialNo中的CurrentSerialNo字段取值
如果通过页面一步步操作,会自动生成订单号,这样做效率太低。我要做的是通过脚本自动创建订单,然后供后续使用。
我的思路是:
1. 我先查询CaseRecord中订单号的最大值
2. 将这个订单号的后四位分离出来
3. 将分离出来的四位数增加到EntitySerialNo中的CurrentSerialNo的值
现在的问题是:当执行脚本后,没法儿让EntitySerialNo中的CurrentSerialNo的指自动增加,而且还要保证不论是通过脚本创建订单还是通过页面正常创建,这个订单号在两个表中的值是统一的正确的。
那就可以创建一个after触发器,每当insert一条数据后,就自动触发对EntitySerialNo中的CurrentSerialNo的值的更新操作
Here we go!!
自动创建订单的脚本如下:
接下来,就对EntitySerialNo表创建触发器:
经过多次修改,成功!!
这里需要注意的是:
1. 注意insert后,EntitySerialNo表的CurrentSerialNo如何自增取值
·
注意订单号的后四位截取方法:
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
注意订单号的后四位截取方法:
set @casecode2 = (select 'S1600' + convert(nvarchar,convert (int,right(MAX(casecode),4)+1)) from CaseRecord)
相关文章推荐
- 算法资料
- Android中常用的一些命令
- SPOJ DETER3 Find The Determinant III(求行列式的秩、高斯消元)
- Leetcode--Maximum Product of Word Lengths
- 我的Emacs速查手册
- HDU Saving
- java请求POST发送json格式请求
- 幂
- 用Java计算某个日期100天后的日期
- DOC元素的相关属性
- HDU 3008 Warcraft(DP之状态的保存)
- 论文阅读(1)--Fine-grained Image Classification by Exploring Bipartite-Graph Labels
- 设计模式之c++实现(二)
- LeetCode 141. Linked List Cycle
- CentOS下使用yum安装Git具体步骤
- 网络视频直播将给影视界带来重大影响
- 使用四种框架分别实现百万websocket常连接的服务器
- saltstack入门之一:saltstack安装
- Linux基础知识的学习(一)
- PLY文件格式及其MATLAB读写操作