SQL Server觸發器和事務

2022-07-14 09:48:15 字數 2899 閱讀 4091

--新增和刪除觸發器

alter trigger tri_tc on t_c

for insert,delete

asbegin

set xact_abort on

declare @insertcount int;

declare @deletecount int;

declare @updatecount int;

set @insertcount = (select count(*) from inserted);

set @deletecount = (select count(*) from deleted);

set @updatecount = ()

if(@insertcount > 0)

begin

insert into t_c2 select * from inserted;

endelse if(@deletecount > 0)  

begin       

delete t_c2 where exists(select temp.cid from deleted temp where temp.cid=t_c2.cid);    

end

end--更新觸發器和事務

--事務主要用在資料的保護,在多表更新時,事務儲存所有事務下的更新語句就不會提交,資料也就不能更新成功

alter trigger tri_tc_update on t_c

for update

asbegin

declare @delcount int;

set @delcount = (select count(*) from deleted);

if(@delcount > 0) 

begin

begin transaction triupdate --定義事務

declare @cname varchar(100);

select @cname = cname from inserted; --儲存更新後的內容

update t_c2 set cname = @cname where cid = (select cid from deleted); --更新

if (@@error <> 0)

begin

rollback transaction triupdate; --事務回滾       

endelse

begin

commit transaction triupdate;   --事務提交    

end     

endend

---------------------儲存過程

if(exists(select name from sysobjects s where s.name='pro_fun' and s.type='p'))

drop procedure pro_fun

gocreate procedure pro_fun

as select * from table

goexec pro_fun

-------------------游標

declare @qybh varchar(10)

declare cur cursor for

select distinct qybh from pj_enterpriseinput

open cur

fetch next from cur into @qybh

while @@fetch_status = 0

begin

print(@qybh)

fetch next from cur into @qybh

endclose cur

deallocate cur

----------------------------------檢視

alter view createview

asselect qybh from createview

go----------------------------------定義方法

alter function funname(@str1 varchar(10),@str2 varchar(10))

returns varchar(10)

asbegin

declare @returnstr varchar(10)

set @returnstr = 'false'

if(@str1 > @str2)  

set @returnstr = 'true'

return @returnstr

endselect dbo.funname(... , ...)

----------------------定義表變數

declare @qybhtable table (id varchar(32),qybh varchar(30))

insert into @qybhtable

select id,qybh from pj_enterpriseinput

select * from @qybhtable

---------------------------case when then 條件統計時的使用

select

sum(case when z.watchname='註冊監理工程師' then 1 else 0 end),

sum(case when z.watchname='xinza' then 1 else 0 end),

sum(case when z.watchname='監理員' then 1 else 0 end)

from zu_corjl z

right join zu_corjltemp t on t.corid=z.corid

觸發器 事務

觸發器 業務是緊密相連的,不可分割的,可以使用觸發器 觸發器的四個要素 1.監視地點 2.監視事件 3.觸發時間 4.觸發事件 after 在之後,當我監視事件發生增刪改以後,進行觸發 before 先完成觸發,再進行增刪改。監視事件之前 建立觸發器的語法 create trigger 觸發器名稱 ...

觸發器 事務

觸發器的關鍵字為trigger,分為inserted 和 deleted 理解觸發器裡面的兩個臨時的表 deleted inserted 注意deleted 與inserted分別表示觸發事件的表 舊的一條記錄 和 新的一條記錄 乙個資料庫系統中有兩個虛擬表用於儲存在表中記錄改動的資訊,分別是 in...

觸發器 事務

觸發器 觸發器為特殊型別的儲存過程,可在執行語言事件時自動生效。sql server 包括三種常規型別的觸發器 dml 觸發器 ddl 觸發器和登入觸發器。當伺服器或資料庫中發生資料定義語言 ddl 事件時將呼叫 ddl 觸發器。登入觸發器將為響應 logon 事件而激發儲存過程。與 sql ser...