Sql server 2005 如何在SQLServer2005中使用触发器进行更新

Sql server 2005 如何在SQLServer2005中使用触发器进行更新,sql-server-2005,triggers,Sql Server 2005,Triggers,我有一个名为tbl_gallery的表,其中有一列数据类型为bit,名为isActive 当用户更新IsActive值时,其他IsActive=true行将自动变为false 如何使用更新的触发器来执行此操作 请帮忙我想你想要的是: CREATE TRIGGER trgGalleryActive ON dbo.tbl_gallery FOR UPDATE AS BEGIN UPDATE g -- Update all other gallery rows

我有一个名为
tbl_gallery
的表,其中有一列数据类型为
bit
,名为
isActive

当用户更新
IsActive
值时,其他
IsActive=true
行将自动变为false

如何使用更新的触发器来执行此操作


请帮忙

我想你想要的是:

CREATE TRIGGER trgGalleryActive
ON dbo.tbl_gallery
FOR UPDATE
AS
    BEGIN
        UPDATE g
        -- Update all other gallery rows for this same user to false
            SET g.IsActive = 0
            FROM tbl_gallery g
                INNER JOIN inserted i
                on g.UserPK = i.UserPK
            WHERE
                -- However, we don't want current inserted records to be updated
                g.TablePK <> i.TablePK
                            -- As per Marc's comment - don't update existing inactive rows unnecessarily
                            AND g.IsActive = 1
                            -- Only if this record is active should any of this happen
                            AND i.IsActive = 1
    END
创建触发器trgGalleryActive
关于dbo.tbl_画廊
更新
作为
开始
更新g
--将此同一用户的所有其他库行更新为false
设置g.IsActive=0
来自tbl_画廊g
内连接插入i
关于g.UserPK=i.UserPK
哪里
--但是,我们不希望更新当前插入的记录
g、 TablePK
--根据Marc的评论-不要不必要地更新现有的非活动行
g.IsActive=1
--只有当此记录处于活动状态时,才会发生任何此类情况
i.IsActive=1
结束

在更新第一个表之后,触发更新第二个表:

CREATE TRIGGER update_table_cityUpdated_afterTable_cityUpdate
  ON Table_city 
  AFTER UPDATE AS
BEGIN
  DECLARE @cityId AS BIGINT
  DECLARE @stateId AS BIGINT
  DECLARE @CityName AS NVARCHAR(200)

  SELECT @cityId=cityId FROM INSERTED
  SELECT @stateId= stateId FROM INSERTED
  SELECT @CityName= CityName FROM INSERTED
  UPDATE table_cityUpdated
 SET
    [dbo].[table_cityUpdated].stateId=@stateId,
    [dbo].[table_cityUpdated].CityName=@CityName
  WHERE [dbo].[table_cityUpdated].cityId=@cityId
END
;

您还可以通过只更新具有
IsActive=1
的行来改进这一点,否则您将不断更新整个表,即使可能只有少数行真正需要更新。。。。