我正在触发器中的表中选择数据(FOR UPDATE)。我正在选择的某些行已由事务更新,它启动了触发器,而某些行则没有。我想在数据集的某处写一个每行的标志,该值将被计算为“id IN(SELECT [id] FROM INSERTED)”。此标志将显示,是否是使用上一个事务更新的行。
在SQL中可以吗?
当然,我可以做两个不同的查询,有两个不同的条件,但触发性能是真正的瓶颈......
答案 0 :(得分:2)
以下是SQL Server的示例:
if object_id('TriggerTest') is not null
drop table TriggerTest
create table TriggerTest (id int identity, name varchar(50), inLastUpdate bit)
insert TriggerTest (name) values ('joe'), ('barrack'), ('george'), ('dick')
go
create trigger dbo.TriggerTestDelete
on TriggerTest
after update
as begin
declare @date datetime
set @date = GETDATE()
update dbo.TriggerTest
set inLastUpdate =
case when id in (select id from inserted) then 1
else 0
end
end
go
update TriggerTest set name = name where id in (1,2)
update TriggerTest set name = name where id in (1,3)
select * from TriggerTest
打印:
id name inLastUpdate
1 joe 1
2 barrack 0
3 george 1
4 dick 0