简体   繁体   English

选择数据,将计算值设置到列中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM