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...