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语句集,经编译后存储在数据库中,然后通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 存储过程的创建: ...
随机推荐
- 《lucene原理与代码分析》笔记
1.全文索引相对于顺序扫描的优势:一次索引,多次使用 2.创建索引的步骤:(1)要索引的原文档 (2)将原文档传给分词组件(Tokenizer)分词组件会做如下事情:(此过程称为Tokenize)a. ...
- u-boot 2011.09 开启debug 调试
以前做过,现在刚才又想不起来了,这个错误非常的严重. 在这里记一下. debug 调试信息的开启在 include/common.h 有如下宏定义: #ifdef DEBUG #define debu ...
- JVM(java 虚拟机)内存设置
一.设置JVM内存设置 1. 设置JVM内存的参数有四个: -Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定: -Xms Ja ...
- intellij Idea快捷键
CTRL+ALT+O 优化导入的类和包 Alt + Center 导入类,实现接口 CTRL+N 查找类CTRL+SHIFT+N 查找文件CTRL+SHIFT+ALT+N 查找类中的方法或变 ...
- vtigerCRM5.4的安装和汉化 ubuntu
由于php5.5经过较大改变,安装vtigercrm的时候可能需要修改一些配置 1.去官网下载vtiger5.4压缩包,解压后放在/var/www目录下 2.简单起见,将目录权限设置为777 vtig ...
- 转: Oracle表空间查询
1.查询数据库中的表空间名称 1)查询所有表空间 select tablespace_name from dba_tablespaces; select tablespace_name from us ...
- SQL 执行计划(一)
缓存执行计划 SQL Server 2008提供了一些服务器对象来分析执行计划Sys.dm_exec_cached_plans: 包含缓存的执行计划,每个执行计划对应一行.Sys.dm_exe ...
- WPF三大模板简介
WPF支持以下类型的模板: (1) 控件模板.控件模板可以将自定义模板应用到某一特定类型的所有控件,或是控件的某一实例.决定控件外观的是ControlTemplate,它决定了控件“长成什么样子”,因 ...
- perform
public class ArgsTest { private List <Object> args; private ArgsTestCheckPoint checkPoint; pub ...
- selenium web driver 配合使用testng
首先为eclipse添加testng插件 步骤如下:help->Install New SoftWare... 2. 添加testng链接,该链接可以在这里找到 For the Eclipse ...