觸發器和游標

2021-06-16 09:36:47 字數 2030 閱讀 8067

1:觸發器

觸發時自動生成兩個表inserted和deleted

定義:類似於c#中的事件,是一種特殊的引數不用手動呼叫;

語法:create trigger 觸發器名 on設定觸發器的表 after(for)或 instead of 查詢語句型別

(insert,delete,updata)

asbegin

觸發時要做的事

endafter在執行表(iserted/deleted)中有記錄,在被執行記錄表中沒記錄;而instead of則會替換觸發器

不讓其執行執行刪除時量表中都會有同條記錄

例子:--  1在每次插入資料的時候都把插入的資料值列印出來。

create trigger trigger_print on teacher

after insert

asbegin

declare @tname nvarchar(50)

declare @tsalary money

select @tname= tname from inserted 

select @tsalary= tsalary from inserted

end

print @tname

print @tsalary

insert into teacher values('鐘蓮',8000)

將deleted表備份到另乙個表

select top 0 *  into classbak

from teacher

-- --(2)建立觸發器

create trigger trigger_eu on teacher

after delete

asbegin

set identity_insert classbak on--插主鍵時要記得開啟

insert into  classbak (tid,tname,tsalary)--注意字段必須記得寫

select * from deleted

set identity_insert classbak off

enddelete  from teacher where tid=1

select * from classbak

select * from teacher

2:游標

效率比較慢

定義declare 游標名 cursor 游標選項(fast_forward,forward_only《得到當前id current of 游標名

>)

for 查詢語句(這裡的表就是游標所建的表)

(2)open

(3)操作

fetch next from 變數名

while @@fetch_status=0 --全域性變數看上一條是否被執行(移動成功)

begin

sql語句

fetch next from 變數名//改變條件的語句

(4)關閉 close

(5)釋放 deallocate

--  2將獎金中的reward設定為 工資的0.1倍

---1:定義變數

declare @id int

declare @salary money

--2:建游標在工資表上

declare add_reward cursor fast_forward

for select tid,tsalary from teacher

open add_reward

fetch next from add_reward into @id,@salary

while @@fetch_status=0

begin

update teachersalary set reward=0.1*@salary

where tsid=@id

fetch next from add_reward into @id,@salary

endclose add_reward

deallocate add_reward

end

觸發器和游標

1 觸發器 觸發時自動生成兩個表inserted和deleted 定義 類似於c 中的事件,是一種特殊的引數不用手動呼叫 語法 create trigger 觸發器名 on設定觸發器的表 after for 或 instead of 查詢語句型別 insert,delete,updata asbeg...

游標和觸發器

游標的概念 游標實際上是一種能夠從包括多條資料記錄的結果集中每次提取的機制 主要意義就是遍歷結果集 sql的游標是一種臨時的資料庫物件,既可以用來存放在資料庫表中的資料行副本,也可以指向儲存在資料庫中資料行的指標。游標提供了在逐行的基礎上操作表中資料的方法 游標常見的用途是儲存查詢結果,以便以後使用...

觸發器和游標的用法

宣告rs為局域變數,否則第二次執行會報rs已定義的錯誤 declare s varchar max declare rs cursor local for select orgcode,exchangenum,salenum,localproductnum,otherproductnum,subsi...