[英]Select data, setting a calculated value into a column
I'm selecting data from a table within a trigger (FOR UPDATE). 我正在从触发器(用于更新)中的表中选择数据。 Some rows I'm selecting have been updated by a transaction, that initiated the trigger, and some rows are not.
我选择的某些行已由事务更新,并启动了触发器,而有些行则未更新。 I'd like to write somewhere in the dataset a flag for every row, which value would be calculated as "id IN (SELECT [id] FROM INSERTED)".
我想在数据集中的某处为每行写一个标志,该标志的值将计算为“ id IN(SELECT [id] FROM INSERTED)”)。 This flag would show, is a row updated with the last transaction or not.
该标志将显示是否用上一个事务更新的行。
Is it possible in SQL? 在SQL中可以吗?
Sure, I can do 2 separate queries, with 2 different conditions, but the trigger perfomance is real bottleneck... 当然,我可以使用2个不同的条件执行2个单独的查询,但是触发性能是真正的瓶颈...
Here's an example for SQL Server: 这是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
This prints: 这打印:
id name inLastUpdate
1 joe 1
2 barrack 0
3 george 1
4 dick 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.