sqlServer 基於遊標創建出發器
阿新 • • 發佈:2019-01-02
觸發器的基本常識:我們在監控表中資料變化時會用到出發器,但是在一個表中執行批量插入或者修改時,我們會發現我們建立的簡單的觸發器所檢測到的資料只有一條,其他資料監測不到了。這就需要我們在建立觸發器時使用遊標進行處理。
遊標的基本概念:我們可以將遊標理解成開闢的一塊基於記憶體的臨時表,表中記錄了我們一個批次下插入的所有資料
而我們需要做的就是通過迴圈遍歷將這些資料讀取出來。
簡單案例: 我們建立 person 和myperson兩張表,通過創建出發器將person中的資料變化插入的myperson表中。
程式碼如下:
create trigger [dbo].[myTrigger]
on [dbo].[person]for insert
as
declare p_cursor cursor scroll for
//declar 宣告遊標 ,cursor 為遊標的關鍵字 ,
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 //刪除遊標釋放記憶體