2012-04-17 122 views

回答

1

我想你想要的东西,如:

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 
+0

你也可以改善这一点,有'IsActive = 1' - 否则你会不断更新**整个表**,即使可能只有少数几行真的需要更新.... – 2012-04-17 05:20:20

+1

@Marc - 好点,比ks,已更新。 – StuartLC 2012-04-17 05:22:17

0

触发用于更新第二个表更新后的第一个表:仅更新行

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][email protected], 
    [dbo].[table_cityUpdated][email protected] 
    WHERE [dbo].[table_cityUpdated][email protected] 
END 
;