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
的行来改进这一点,否则您将不断更新整个表,即使可能只有少数行真正需要更新。。。。