需求:

项目表项目编码触发器编写

为项目表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

SQL——触发器——插入触发器——边学边项目写的。的更多相关文章

  1. SQL Server DDL触发器运用

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) DDL运用场景(DDL Scene) ...

  2. SQL Server:触发器详解

    1. 概述 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活. 所以触发器可以用来实现对表实施复杂的完整性约束. 2. 触发器的分类 SQL S ...

  3. Sqlite3 设置插入触发器

    需求: 数据库中表t_VerifyCsmDetail需要最多保存10W条记录,超出时删除最旧的那一条. 思路:设置插入触发器.插入前先判断表中记录总数,如果大于99999条,则删除最旧的一条记录. 代 ...

  4. pl/sql学习(5): 触发器trigger/事务和锁

    (一)触发器简单介绍 触发器是由数据库的特定时间来触发的, 特定事件主要包括以下几种类型: (1)DML: insert, update,delete 增删改 (2)DDL: create, alte ...

  5. SQL SERVER TRIGGER 触发器

    1.触发器简介 触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手动执行,而是由事件来触发.触发器是当对某一个表进行操作.例如:update.insert.delete这些操作的时候,系统会 ...

  6. 记一次SQL Server Insert触发器编写过程

    实现功能:新增特定类型的新闻时,自动追加特定的背景图片. 第一版(错误信息:不能在 'inserted' 表和 'deleted' 表中使用 text.ntext 或 image 列),代码如下: - ...

  7. ORACLE PL/SQL编程之触发器

    8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INS ...

  8. SQL server触发器中 update insert delete 分别给写个例子被。

    SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...

  9. SQL基础-存储过程&触发器

    一.存储过程 1.存储过程简介 存储过程: 一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,然后通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 存储过程的创建: ...

随机推荐

  1. opencv png和jpg的叠加

    char *bgFile = "C:/C_Project/HandTraining/Debug/res/bg.jpg"; FILE *file = fopen(bgFile, &q ...

  2. 11.5---含有空字符串的字符串查找(CC150)

    注意,1,"" 和 " ".是不同的,空字符串指的是"": 2,注意String的compareTo.小于是指<0.并不是==-1: ...

  3. ndk学习8: 编译动态库

    目录: 手工编译动态库 ndk-build编译动态库(Eclipse环境)   手工编译静态库 老规矩还是先手工操作,知其然并知其所以然   需要用到的核心命令: gcc -g -c -fpic -W ...

  4. 查找问题的利器 - Git Bisect

    原文:http://gitbook.liuhui998.com/5_4.html 假设你在项目的'2.6.18'版上面工作, 但是你当前的代码(master)崩溃(crash)了. 有时解决这种问题的 ...

  5. Apache2.4.6 添加虚拟主机

    apache2.4 与 apache2.2 的虚拟主机配置写法有所不同 apache2.2的写法: <VirtualHost *:80> ServerName domain.com Doc ...

  6. ios7 上 UIActivity 用的image

    在ios8 上UIActivityCategoryShare类型的UIActivity的图标支持彩色图片了,但是在ios7上不行,ios8上的 UIActivityCategoryAction类型也不 ...

  7. google API 点连线

    这个是模拟的数据,用于测试,为了方便学习 弹出框信息都是固定的,以及操作都不是写的循环,实际开发用 setInterval 或者for 以减少冗余. <!DOCTYPE html> < ...

  8. redis pub/sub 实战: 微信语音识别

    2015年5月22日 20:20:20 星期五 效果: 这边对微信说话,  浏览器端及时显示语音识别的文字 注意: 在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明so ...

  9. Linux(CentOS、Ububtu)一键安装Openstack及其它参考文档汇总

    原文链接  http://www.aboutyun.com/thread-10920-1-1.html openstack相关资料 CentOS下一键安装Openstack  http://blog. ...

  10. 4.kvm克隆虚拟机

    virt-clone 作用简介 virt-clone 主要是用来克隆kvm虚拟机,并且通过 Options.General Option.Storage Configuration.Networkin ...