代码之家  ›  专栏  ›  技术社区  ›  noober

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

  •  0
  • noober  · 技术社区  · 15 年前

    我正在从触发器内的表中选择数据(用于更新)。我选择的某些行已由启动触发器的事务更新,而有些行没有更新。我想在数据集中的某个地方为每行写一个标志,该值将被计算为“i d in(select[i d]from inserted)”。此标志将显示,是否是用最后一个事务更新的行。

    在SQL中是否可能?

    当然,我可以做两个独立的查询,有两个不同的条件,但触发器性能是真正的瓶颈…

    1 回复  |  直到 15 年前
        1
  •  2
  •   Andomar    15 年前

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