zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    oracle hint
    oracle资源
    数据迁移相关笔记
    csdn的blog可以直接导入内含图片的word文档吗?
    Windows Live Writer离线博客工具使用教程(适用于博客园、CSDN、51CTO等等博客)
    csdn的博客上传word图片
    怎样将word中的图片插入到CSDN博客中
    测试用Word2007发布博客文章
    用WORD2007发布博客文章
    Word2007发布博客
  • 原文地址:https://www.cnblogs.com/blogs2014/p/5306447.html
Copyright © 2011-2022 走看看