SQL——触发器——插入触发器——边学边项目写的。
2016-03-22 14:48
232 查看
需求:
项目表项目编码触发器编写
为项目表DwProject编写触发器,目的为当创建新项目时,且ProjectNo
为Null或空字符串时,自动创建项目编号,编号格式为4位年号,2位月份,2位顺序号,如20160301。具体要求如下:
1、触发器名称Tig_Project_Number。
2、仅Insert时触发。
3、触发器前6位为GetDate取值当前年和月,如201603,后两位为当前月的最后一个项目顺序号 1。
4、暂不考虑批量插入,不使用游标。
5、首先在192.168.1.113编写及测试,确定没问题后审核并部署在114服务器。
触发器编写完成后将现有所有项目编号重新按照触发器定义的格式重新编码。
修改版
心得:格式化了一下,去掉了单行的 BEGIN END
项目表项目编码触发器编写
为项目表DwProject编写触发器,目的为当创建新项目时,且ProjectNo
为Null或空字符串时,自动创建项目编号,编号格式为4位年号,2位月份,2位顺序号,如20160301。具体要求如下:
1、触发器名称Tig_Project_Number。
2、仅Insert时触发。
3、触发器前6位为GetDate取值当前年和月,如201603,后两位为当前月的最后一个项目顺序号 1。
4、暂不考虑批量插入,不使用游标。
5、首先在192.168.1.113编写及测试,确定没问题后审核并部署在114服务器。
触发器编写完成后将现有所有项目编号重新按照触发器定义的格式重新编码。
ALTER trigger [dbo].[Tig_Project_Number] on [dbo].[DwProject] after insert --插入类型 as --声明4个变量 DECLARE @Title varchar(6) DECLARE @dateYm varchar(20) DECLARE @TitleNumber varchar(8) DECLARE @TitleSessess varchar(8) SET @dateYm= CONVERT(CHAR(8), CURRENT_TIMESTAMP, 112)--得到格式为20160101的时间。 SET @Title = SUBSTRING(@dateYm, 1, 6)--字符串截取1-6个(非从0开始) set @TitleNumber=(select Max(ProjectNo) from DwProject where ProjectNo like @Title+'%')--取出已有最大编号,如果没有为空。 --如果插入为空或者NULL。 if((select ProjectNo from inserted)='' or (select ProjectNo from inserted)is NULL) begin --如果查询到历史编码—————历史编码+1 if(len(@TitleNumber)>6 and @TitleNumber is not null ) begin set @TitleSessess=(select convert(int,@TitleNumber)+1) end else --否则直接用 201612 格式 + 第一个顺序号 01 begin Set @TitleSessess=@Title+'01' end update DwProject set ProjectNo=@TitleSessess where Id=(select Id from inserted) end--如果插入为空或者NULL。结束标记。
修改版
ALTER TRIGGER [dbo].[Tig_Project_Number] ON [dbo].[DwProject] AFTER INSERT --插入类型 AS --声明4个变量 DECLARE @Title VARCHAR(6) DECLARE @dateYm VARCHAR(20) DECLARE @TitleNumber VARCHAR(8) DECLARE @TitleSessess VARCHAR(8) SET @dateYm= CONVERT(CHAR(8), CURRENT_TIMESTAMP, 112)--得到格式为20160101的时间。 SET @Title = SUBSTRING(@dateYm, 1, 6)--字符串截取1-6个(非从0开始) SET @TitleNumber=(SELECT Max(ProjectNo) FROM DwProject WHERE ProjectNo like @Title+'%')--取出已有最大编号,如果没有为空。 --如果插入为空或者NULL。 IF((SELECT ProjectNo FROM inserted)='' or (SELECT ProjectNo FROM inserted)is NULL) BEGIN --如果查询到历史编码—————历史编码+1 IF(len(@TitleNumber)>6 and @TitleNumber is not null ) SET @TitleSessess=(SELECT convert(int,@TitleNumber)+1) --否则直接用 201612 格式 + 第一个顺序号 01 ELSE SET @TitleSessess=@Title+'01' UPDATE DwProject SET ProjectNo=@TitleSessess WHERE Id=(SELECT Id FROM inserted) END--如果插入为空或者NULL。结束标记。
心得:格式化了一下,去掉了单行的 BEGIN END
相关文章推荐
- 本地navicat连接远程mysql是数据库
- Oracle 删除重复数据
- 数据库导入
- SqlServer循环读取配置
- MongoDB安装(一)
- php5.5.12+redis2.6 Windwos安装下安装
- 数据库集群
- ETL系列:一种针对oracle分区表的统计信息收集策略
- ORACLE使用EXPDP和IMPDP数据泵进行导出导入的方法
- ORACLE ADF11g : ManagedBean入门
- MySQL引擎
- oracle触发器使用案例
- mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
- mongodb时间格式化
- sql service树查询
- spring MVC项目mysql转到oracle数据库
- SQL语句 - 嵌套查询
- 深度解析mysql登录原理
- 1.4-Memcached基本操作
- ORACLE ADF11g : Taskflow入门