sql 使用触发器如何update多条记录

--begin 创建tb1表
if (object_id('tb1', 'u') is not null)
    drop table tb1
go
create table tb1(id int,name varchar(10),state int default(0)) 
declare @n int 
set @n=0
while (@n<10)
begin
	insert into tb1 (id,name)values(@n,'A'+cast( @n as varchar(5)))
	set @n+=1;
end
select * into tb2 from tb1
select * from tb1
--end

--begin 创建触发器
if (object_id('DataSync', 'TR') is not null)
    drop trigger DataSync
go
create trigger DataSync
on tb1
for update
as 
begin 
update tb2 
set tb2.name=tb1.name
from inserted as tb1 where tb2.id=tb1.id 
end 

--end

--begin 测试
update tb1
set name='tb1_name'
where id in (1,2,3,5,6,7)
select * from tb1
select * from tb2
--end

参考:

SQL Update语句,更新表中的符合要求的多条记录,更新的值是从另一个表中调用的

url:http://bbs.csdn.net/topics/280054052

SQL Server 触发器

url: http://www.cnblogs.com/hoojo/archive/2011/07/20/2111316.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 中,默认情况下,每次更新操作都会触发触发器执行,无论是单条更新还是多条更新。如果你希望在多条更新语句中只有最后一次更新触发触发器执行,可以考虑以下两种方法: 1. 使用临时表或表变量:你可以将需要更新的数据先存储到临时表或表变量中,然后在最后一次更新之后,通过触发器读取临时表或表变量的数据进行处理。 例如,你可以创建一个临时表或表变量来存储需要更新的数据: ```sql DECLARE @Updates TABLE ( ID INT, Column1 VARCHAR(50), Column2 INT ) INSERT INTO @Updates (ID, Column1, Column2) VALUES (1, 'Value 1', 100), (2, 'Value 2', 200), (3, 'Value 3', 300) -- 执行最后一次更新 UPDATE YourTable SET Column1 = u.Column1, Column2 = u.Column2 FROM YourTable t JOIN @Updates u ON t.ID = u.ID -- 在触发器中读取临时表或表变量的数据进行处理 ``` 2. 使用标志位:你可以在触发器使用一个标志位来判断是否是最后一次更新。在每次更新前,将标志位设置为 0,在最后一次更新之前,将标志位设置为 1。在触发器中判断标志位的值,只在标志位为 1 时执行逻辑。 例如,你可以创建一个标志位变量,并在触发器使用它来判断是否是最后一次更新: ```sql DECLARE @IsLastUpdate BIT = 0 IF EXISTS (SELECT * FROM inserted) BEGIN SET @IsLastUpdate = 1 END -- 在触发器中判断 @IsLastUpdate 的值,只在最后一次更新时执行逻辑 ``` 这些方法可以帮助你在多条更新语句中只在最后一次更新时触发触发器执行。请根据你的具体需求选择适合的方法。希望对你有所帮助!如果你有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值