需求:

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

为项目表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. SNMP协议入门

    SNMP协议入门 1.引言 基于TCP/IP的网络管理包含3个组成部分: 1) 一个管理信息库MIB(Management Information Base).管理信息库包含所有代理进程的所有可被查询 ...

  2. Android 中的 Intent 简介

    Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据. ------------------------------- ...

  3. Linux ffmpeg命令的介绍与使用

    ffmpeg使用语法 ffmpeg [[options][`-i' input_file]]... {[options] output_file}... 如果没有输入文件,那么视音频捕捉(只在Linu ...

  4. 读书笔记-js

    定义描述类名或者方法名的注解:ClassOrMethodFullName.java [写一个js方法] 1 2 3 function alertdemo() { // }; function + 方法 ...

  5. 30 GroupSock(Port)——live555源码阅读(四)网络

    30 GroupSock(Port)——live555源码阅读(四)网络 30 GroupSock(Port)——live555源码阅读(四)网络 简介 Port类的定义 Port的构造与全局的 &l ...

  6. storyboard有多个Segue的传递

    在项目中需要在一个页面向多个页面传不同的值. 在view2Controller和view3Controller中分别有相应的Str2和Str3 - (void)prepareForSegue:(UIS ...

  7. Ubuntu+Apache+PHP+Mysql环境搭建

    一.操作系统Ubuntu 14.04 64位,虚拟机服务器 二.Apache 1.安装Apache,安装命令:sudo apt-get install apache2 2.环境配置: 1)配置文件:路 ...

  8. Java Log4j日志使用

    在程序中使用log4j 1.导入包import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator; 2.获取lo ...

  9. 2.3---删除链表的结点,不提供头结点(CC150)

    这里,注意如果是尾结点,那么无解. public class Solution { public void deleteNode(ListNode node) { //利用李代桃僵 // // if( ...

  10. linux系统vsftpd登陆慢卡怎么办

    linux系统vsftpd登陆慢卡怎么办 浏览:145 | 更新:2013-12-31 00:50 vsftpd是linux系统中的一款ftp软件,用它可以实现文件,数据上传与下载,但有些用户会发现v ...