Использование триггера в одной таблице и обновление другой таблицы - PullRequest
1 голос
/ 03 марта 2011
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

Это код, но он работает не так, как я хочу. в этом случае обновляется поле «Моя загрузка» из таблицы (d) при изменении каждой записи в таблице (а). Я хочу, чтобы поле загрузки в таблице (d) изменялось только при изменении поля имени в таблице (a).

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Вы используете специальные таблицы Inserted и Deleted внутри триггера, чтобы определить, какие строки были затронуты.Для триггера обновления 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
0 голосов
/ 03 марта 2011

Почему бы вам не сделать это немного чище и проще, поскольку вы собираетесь обновлять только если имя обновлено ...

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...