SQL 觸發器 插入觸發器 邊學邊專案寫的。

2022-02-21 09:08:09 字數 2512 閱讀 4005

需求:

專案表專案編碼觸發器編寫

為專案表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)

endelse --否則直接用 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 觸發器 直接遞迴觸發器

create trigger dbo loving20000 on dbo s for delete asdeclare age int select age sage from deleted delete s where sage age delete from s where sname xq...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...

sql 觸發器 儲存過程 觸發器(3 3)

1 what?什麼是觸發器 trigger 前兩篇介紹了儲存過程,儲存過程可以理解為sql語句集。那麼觸發器就是一種特殊的儲存過程,也就是一群特殊的sql語句集。特殊在哪?從上文得知,儲存過程是依賴名字才被呼叫的。不僅是儲存過程,我們常用的方法等,大部分也是先知道名字,才能去使用。就像吃飯採用訂外賣...