Выберите данные, установив вычисленное значение в столбец - PullRequest
0 голосов
/ 13 июля 2010

Я выбираю данные из таблицы в триггере (FOR UPDATE). Некоторые строки, которые я выбрал, были обновлены транзакцией, которая инициировала триггер, а некоторые строки нет. Я хотел бы написать где-нибудь в наборе данных флаг для каждой строки, значение которого будет рассчитываться как "id IN (SELECT [id] FROM INSERTED)". Этот флаг показывает, обновлена ​​строка с последней транзакцией или нет.

Возможно ли это в SQL?

Конечно, я могу сделать 2 отдельных запроса с 2 различными условиями, но производительность триггера является реальным узким местом ...

1 Ответ

2 голосов
/ 13 июля 2010

Вот пример для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...