1. 程式人生 > >sqlServer 基於遊標創建出發器

sqlServer 基於遊標創建出發器

觸發器的基本常識:我們在監控表中資料變化時會用到出發器,但是在一個表中執行批量插入或者修改時,我們會發現我們建立的簡單的觸發器所檢測到的資料只有一條,其他資料監測不到了。這就需要我們在建立觸發器時使用遊標進行處理。

遊標的基本概念:我們可以將遊標理解成開闢的一塊基於記憶體的臨時表,表中記錄了我們一個批次下插入的所有資料

             而我們需要做的就是通過迴圈遍歷將這些資料讀取出來。

簡單案例: 我們建立 person 和myperson兩張表,通過創建出發器將person中的資料變化插入的myperson表中。

      程式碼如下:

create trigger [dbo].[myTrigger]

on [dbo].[person]
for insert
as

declare p_cursor cursor scroll for

//declar 宣告遊標 ,cursor 為遊標的關鍵字 ,

select id ,name from inserted;  //出發器檢測的資料
open p_cursor           //開啟遊標
declare @name varchar(20),@id int
fetch from p_cursor into @id,@name  //fetch 關鍵字 取cursor中的資料
while @@FETCH_STATUS=0             //返回遊標遍歷的值,作為迴圈結束的條件
begin
insert into myPerson values (@name)
fetch next from p_cursor into @id,@name    //取下一條資料,否則會死迴圈,按照順序匹配欄位值
end
close p_cursor         //關閉遊標
deallocate p_cursor //刪除遊標釋放記憶體