2010-07-13 61 views
0

我從觸發器(FOR UPDATE)中的表中選擇數據。我選擇的某些行已被事務更新,該事務啓動了觸發器,而某些行不是。我想在數據集中的每一行寫一個標誌,這個值將被計算爲「id IN(SELECT [id] FROM INSERTED)」。這個標誌會顯示,是否有更新的最後一筆交易。選擇數據,將計算值設置爲列

SQL中可能嗎?

當然,我可以做2個獨立的查詢,有2個不同的條件,但是觸發性能比較是真正的瓶頸......

+0

當你說[sql]的意思是[sql-server]嗎?觸發器在不同的DBMS風格中有所不同。 – APC 2010-07-13 01:59:39

+0

觸發器只是上下文。問題是關於case/when/then/as語法。 – noober 2010-07-13 12:38:05

回答

1

下面是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