需求:
項目表項目編碼觸發器編寫
為項目表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