在一个表中使用触发器并更新其他表

时间:2011-03-03 19:15:45

标签: sql triggers

CREATE TRIGGER dbo.YourTrigger
ON a
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;

IF NOT UPDATE(name)
RETURN

UPDATE d
set upload = 1
FROM d
END

这是代码,但它不按我想要的方式工作。在这种情况下,当表(a)中的每个记录发生变化时,它会从表(d)更新我的上传字段。 我希望表(d)中的上传字段仅在表(a)中(名称字段)改变时进行更改。

2 个答案:

答案 0 :(得分:1)

您可以使用触发器内的特殊InsertedDeleted表来标识受影响的行。对于更新触发器,Deleted包含行的“之前”版本,Inserted包含行的“之后”版本。

CREATE TRIGGER dbo.YourTrigger
ON a
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    IF UPDATE(name)
        UPDATE d
            set upload = 1
            FROM Inserted i
                INNER JOIN Deleted de
                    ON i.EmpId= de.EmpId
                INNER JOIN d
                    ON i.EmpId= d.RecId
            WHERE i.name <> de.name
END

答案 1 :(得分:0)

为什么不这样做更清洁简单,因为如果名称更新,你只会更新......

CREATE TRIGGER dbo.YourTrigger
ON a
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;

IF UPDATE(name)
BEGIN
UPDATE d
set upload = 1
FROM d
END
ELSE
BEGIN
       --HERE GOES CODE
END
END