【发布时间】:2014-03-26 15:32:20
【问题描述】:
我需要在表上创建一个更新触发器,如果存在某些插入的值,它也会更新表。这可能吗?我已经尝试过,当插入的值存在并触发触发器时,触发器会进行更新并再次触发自身。最终 - 僵局。有没有办法安全地做到这一点?
代码:
CREATE TRIGGER dbo.trg_updateaddress on dbo.Customers
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @original_source varchar(50)
SELECT @original_source = address_source FROM deleted
IF EXISTS (SELECT * FROM inserted i
INNER JOIN deleted d
ON i.cust_id = d.cust_id
WHERE i.address_source IS NOT NULL
AND (i.[address] <> d.[address]
OR i.address2 <> d.address2
OR i.city <> d.city
OR i.[state] <> d.[state]
OR i.zip <> d.zip
OR i.country <> d.country
OR i.phone <> d.phone
OR i.cell <> d.cell
OR i.email <> d.email))
BEGIN
UPDATE customers
SET address_changed = GETDATE()
END
ELSE
BEGIN
UPDATE customers
SET address_source = @original_source
END
END
【问题讨论】:
-
你能显示你的触发代码吗?
-
您是否想要触发器递归触发,还是没有必要?
-
即使这样有效,它也会用新的
GETDATE()更新Customers的所有行。 -
但是你有
BEGIN UPDATE customers SET address_changed = GETDATE() END,没有WHERE。 -
我认为
INSTEAD OF触发器在这里会更有用。
标签: sql-server database sql-server-2008 tsql triggers