选择数据,将计算值设置为列
问题描述:
我从触发器(FOR UPDATE)中的表中选择数据。我选择的某些行已被事务更新,该事务启动了触发器,而某些行不是。我想在数据集中的每一行写一个标志,这个值将被计算为“id IN(SELECT [id] FROM INSERTED)”。这个标志会显示,是否有更新的最后一笔交易。选择数据,将计算值设置为列
SQL中可能吗?
当然,我可以做2个独立的查询,有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
当你说[sql]的意思是[sql-server]吗?触发器在不同的DBMS风格中有所不同。 – APC 2010-07-13 01:59:39
触发器只是上下文。问题是关于case/when/then/as语法。 – noober 2010-07-13 12:38:05