0
我有一个名为tbl_gallery
的表,它有一列数据类型bit
,名为isActive
。如何在SQL Server 2005中使用触发器进行更新
当用户更新IsActive
值时,其他具有IsActive = true
的行将自动变为false。
如何用更新的触发器做到这一点?
请帮
我有一个名为tbl_gallery
的表,它有一列数据类型bit
,名为isActive
。如何在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' - 否则你会不断更新**整个表**,即使可能只有少数几行真的需要更新.... – 2012-04-17 05:20:20
@Marc - 好点,比ks,已更新。 – StuartLC 2012-04-17 05:22:17