--新增和刪除觸發器
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...