程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL SERVER的行式觸發器

SQL SERVER的行式觸發器

編輯:關於SqlServer

  曾經以為SQL SERVER的觸發器只能觸發單行,也就是說如果一個delete觸發器,如果同時刪除多行時,只會對第一條記錄觸發,後來發現了不是人家SQL Server不支持,而是偶腦子笨沒發現。

  其實inserted和deleted兩張內部表存放了所有要插入或要刪除的記錄,可以用cursor逐次訪問裡面的每條記錄,下面是一個示例,該觸發器將要刪除的記錄轉移到另一張表中:

  第一步,創建這兩張表

create table table1([id] int primary key, [value] varchar(100))create table table2([id] int primary key, [value] varchar(100))

  第二步,插入測試數據

declare @i intset @i = 1while @i <= 100begin    insert into table1([id], [value])    values(@i, cast(@i as varchar))    set @i = @i + 1end

  創建table1的delete觸發器

create trigger tr_d_table1 on table1 for deleteasbegin    declare @id int, @value varchar(100)    declare cur_del cursor local forward_only for    select [id], [value]    from deleted    open cur_del    fetch next from cur_del into @id, @value    while @@fetch_status = 0    begin        insert into table2([id], [value])        values(@id, @value)            fetch next from cur_del into @id, @value    end    close cur_del    deallocate cur_del    end
現在對table1執行delete語句,發現所有被刪除的記錄都記錄在在table2中了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved