SQL——触发器——插入触发器——边学边项目写的。
需求:
为项目表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——触发器——插入触发器——边学边项目写的。的更多相关文章
- SQL Server DDL触发器运用
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) DDL运用场景(DDL Scene) ...
- SQL Server:触发器详解
1. 概述 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活. 所以触发器可以用来实现对表实施复杂的完整性约束. 2. 触发器的分类 SQL S ...
- Sqlite3 设置插入触发器
需求: 数据库中表t_VerifyCsmDetail需要最多保存10W条记录,超出时删除最旧的那一条. 思路:设置插入触发器.插入前先判断表中记录总数,如果大于99999条,则删除最旧的一条记录. 代 ...
- pl/sql学习(5): 触发器trigger/事务和锁
(一)触发器简单介绍 触发器是由数据库的特定时间来触发的, 特定事件主要包括以下几种类型: (1)DML: insert, update,delete 增删改 (2)DDL: create, alte ...
- SQL SERVER TRIGGER 触发器
1.触发器简介 触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手动执行,而是由事件来触发.触发器是当对某一个表进行操作.例如:update.insert.delete这些操作的时候,系统会 ...
- 记一次SQL Server Insert触发器编写过程
实现功能:新增特定类型的新闻时,自动追加特定的背景图片. 第一版(错误信息:不能在 'inserted' 表和 'deleted' 表中使用 text.ntext 或 image 列),代码如下: - ...
- 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 ...
- SQL server触发器中 update insert delete 分别给写个例子被。
SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...
- SQL基础-存储过程&触发器
一.存储过程 1.存储过程简介 存储过程: 一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,然后通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 存储过程的创建: ...
随机推荐
- (备忘)android模拟器摄像头模拟
Camera分Front Camera和Back Camera 通常我们模拟后摄像头就可以了 三个选项 none:表示没有摄像头,打开摄像应用会崩溃 emulated:系统模拟一个动态的画面--在黑白 ...
- linux 文件系统sysvinit 流程分析
参考网上许多的教程. 然后有一下相关的笔记: kernel 在挂载完文件系统后,会执行第一个进程init 这个进程的PID为1 这个进程是所有进程的父进程 init 进程,首先要去读取inittab中 ...
- PyQt4多线程定时刷新控件
1.通过事件关联和线程关联的方法刷新控件 self.listview=updatelistview()self.listview.updateText.connect(self.viewlist) ...
- 使用WITH AS提高性能简化嵌套SQL
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让 ...
- codecademy-command line-inputoutput
What happens when you type this command? $ echo "Hello" Hello The echo command accepts the ...
- 由于Windows和Linux行尾标识引起脚本无法运行的解决
在所有的操作系统中,文本文件的结束或者换行都是有行尾符来标识的,C语言中经常使用\n作为换行,\r作为跳格TAB:实际上在计算机还没有真正出现之前,有种电传打字机的设备,每秒钟可以打印10个字符,但是 ...
- 构建web应用示例
1.1 请求方法的判断 var http = require('http'); var server = http.createServer(function(request,response){ s ...
- Icon Font的转换
Icon Font是用于网页的纯色图标,这里引用一张网络图片: 由于体积小,易维护等特点,IconFont应用非常广泛. 这里推荐一个转换器,通过Upload一个后缀ttf的字体文件,可以反解出文件下 ...
- Ubuntu jsp平台使用JDBC来连接MySQL数据库
Ubuntu 7.04 搭建Ubuntu jsp平台开发环境MySQL+tomcat+apache+j2sdk1.6在所有安装开始前先在Terminal中输入 rpm -q -a查看是否安装过rpm ...
- WP8图片缩放功能实现
最近在学习WP8,想实现WP微信中查看图片时的放大缩小功能. 网上找了两个解决方案: 1 利用GestureListener 这个类在Microsoft.Phone.Controls.Toolkit中 ...