觸發器運用例項2

2021-10-03 11:59:54 字數 2373 閱讀 3316

接上以前的觸發器例項,現在面臨了另乙個問題,之前做的觸發器是按照當前年份條數去給他設定後面對應的序號的,但是會有如圖017和018建立好了之後,他把017給刪除了,那麼當前年份的條數就變成了17條,在新建好儲存的時候會提示編號重複,原因也很簡單,當使用年份條數作為計數器的時候,條數和序號可能存在不符的情況(中間刪除),這一種特殊情況只能特殊處理掉,下面是**,其中只額外新增了乙個去除左邊為0的方法

這邊給大家講解一下

當有字串01001的時候,這個是序號,我們需要獲取的值是1001,也就是去除左邊的0,這個時候採取的操作是先替換,然後ltrim去除空格,然後再次替換,也就是replace(ltrim(replace(a,『0』,』 『)),』 『,『0』)

其中替換是將0替換成空格(注意不是』'空值)

use [yferp_hh]

go/****** object: trigger [dbo].[cghtspbh] script date: 2020-03-04 11:19:58 ******/

set ansi_nulls on

goset quoted_identifier on

goalter trigger [dbo].[cghtspbh]

on [dbo].[採購合同審批表]

after insert

asbegin

declare @number int;

declare @string char(17);

declare @string2 char(20);

declare @number2 int;

declare @number3 char(3);

select @number2=(select top 1 replace(ltrim(replace(rtrim(ltrim(substring(合同編號,11,13))),'0',' ')),' ','0') from 採購合同審批表

where substring(合同編號,3,4)=year(getdate()) order by 合同編號 desc)

//獲取當前最新的編號,擷取其中最後3位(計數字),去除0後化作int型別做比較

select @number=(select count(*) from 採購合同審批表

where substring(合同編號,3,4)=year(getdate())

)//獲取當前一共有多少條符合的資料個數

if(@number2 >=@number) //如果最新的編號計數》符合的條數(存在中間刪除的情況)

begin

select @number2=@number2+1;//最新計數器+1作為計數編碼

select @number3=(

select distinct case when @number2<10 then '00'+convert(varchar(30),@number2)

when @number2>=10 and @number2<100 then '0'+convert(varchar(30),@number2)

when @number2>=100 then convert(varchar(30),@number2) end as 數量 from 採購合同審批表

where substring(合同編號,3,4)=year(getdate()));

end

if(@number2

begin

select @number3=(

select distinct case when count(*)<10 then '00'+convert(varchar(30),count(*))

when count(*)>=10 and count(*)<100 then '0'+convert(varchar(30),count(*))

when count(*)>=100 then convert(varchar(30),count(*))

end as 數量 from 採購合同審批表

where substring(合同編號,3,4)=year(getdate()));

endselect @string=substring(合同編號,0,11) from inserted;

select @string2=合同編號 from inserted;

update 採購合同審批表 set 合同編號 = rtrim(ltrim(rtrim(ltrim(@string))+rtrim(ltrim(@number3)))) where 合同編號=@string2

end

下面接一下之前的那邊鏈結,兩篇可以對照看一下

觸發器例項

sql server 觸發器例項 基本語法 幫助裡的語法太長了 create trigger triggername on tablename for insert delete update as 觸發器要執行的操作語句.go注意 觸發器中不允許以下 transact sql 語句 alter d...

觸發器例項

建立乙個插入操作的觸發器 當向學生選課表sc中插入一條記錄後,變更在學生表student對應學生的選課門數。create trigger stu in onsc 對哪個表或者檢視進行操作 forinsert 設定觸發條件,也就是在什麼情況下會觸發這個觸發器 asupdate student sets...

mysql條件觸發器例項 mysql觸發器例項一則

例子,例項學習mysql觸發器的用法。一,準備二張測試表 1,測試表1 複製 示例 drop table if exists test create table test id bigint 11 unsigned not null auto increment,name varchar 100 n...