0
isActive
と呼ばれるbit
のデータ型の列を持つtbl_gallery
というテーブルがあります。SQL Server 2005でトリガーを使用する方法
ユーザーがIsActive
の値を更新すると、IsActive = true
の他の行は自動的にfalseになります。
更新されたトリガーではどうすればいいですか?
私はあなたが何かしたいと思います
isActive
と呼ばれるbit
のデータ型の列を持つtbl_gallery
というテーブルがあります。SQL Server 2005でトリガーを使用する方法
ユーザーが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
トリガーを:
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
;
あなたはまた、唯一のその行を更新することにより、これを向上させることができ'IsActive = 1'を持っている - そうでなければ、おそらく一握りの行だけが実際に更新される必要があるにしても、**全体のテーブル**を絶えず更新するでしょう... –
@Marc - 良い点更新されました。 – StuartLC