SQL SERVER的行式触发器

本文介绍如何在SQL Server中使用删除触发器将被删除的数据转移至另一张表。通过创建示例表并编写触发器代码,实现了在执行删除操作时,能够保留原有数据供后续查询使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

曾经以为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 int
set @i = 1
while @i <= 100
begin
    
insert into table1([id][value])
    
values(@icast(@i as varchar))

    
set @i = @i + 1
end

创建table1的delete触发器

create trigger tr_d_table1 on table1 for delete
as
begin
    
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中了

delete from table1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值