2012-04-17 13 views
0

isActiveと呼ばれるbitのデータ型の列を持つtbl_galleryというテーブルがあります。SQL Server 2005でトリガーを使用する方法

ユーザーがIsActiveの値を更新すると、IsActive = trueの他の行は自動的にfalseになります。

更新されたトリガーではどうすればいいですか?

私はあなたが何かしたいと思います

答えて

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'を持っている - そうでなければ、おそらく一握りの行だけが実際に更新される必要があるにしても、**全体のテーブル**を絶えず更新するでしょう... –

+1

@Marc - 良い点更新されました。 – StuartLC

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 
; 
関連する問題