Как я могу написать триггер обновления для обновления текущей таблицы на основе значения в другой таблице в SQL Server 2008? - PullRequest
5 голосов
/ 26 ноября 2011

У меня есть две таблицы, Table_A и Table_B. Таблица_A имеет отношение «один ко многим» с таблицей «B».

После вставки записи в дочернюю таблицу (Table_B) я хочу использовать триггер для извлечения значения из поля в родительской таблице (Table_A) и обновления текущей вставленной записи в Table_B.

TABLE_A

PK|EmpID|MemID|Firstname|Lastname
----------------------------------
1 |1234 |AB123|John     | Doe
2 |5678 |CD456|Jane     | Smith

TABLE_B

PK|EmpID|MemID|Description
---------------------
1 |1234 |NULL |Finance
2 |1234 |NULL |IT
3 |5678 |NULL |Finance 
4 |5678 |NULL |Management

Триггер должен получить значение MemID из Table_A и обновить его соответствующее значение в Table_B, где [Table_A]. [EmpID] = [Table_B]. [EmpID]. Конечно, после 4 вставок в Таблицу B результаты должны быть следующими:

PK|EmpID|MemID|Description
---------------------
1 |1234 |AB123|Finance
2 |1234 |AB123|IT
3 |5678 |CD456|Finance 
4 |5678 |CD456|Management

Я интенсивно искал другие технические сайты, но не могу найти ни одного с этим конкретным сценарием. Как отчаянный шаг я зарегистрировался на этом сайте, и это будет мой первый пост о помощи.

Ниже приведена моя тщетная попытка создания первого запуска в MS SQL Server 2008 R2.

CREATE TRIGGER dbo.trgInsMemID
ON dbo.Table_B
AFTER INSERT
AS
    BEGIN
        UPDATE dbo.Table_B
            SET MemID = 
                (SELECT MemID 
                FROM inserted i 
                JOIN dbo.Table_A c ON c.EmpID = i.EmpID)
            FROM dbo.Table_B b
            JOIN inserted i ON i.MemID = b.MemID
    END

1 Ответ

3 голосов
/ 26 ноября 2011

Полагаю, вы хотите, чтобы ваше заявление об обновлении было изменено так:

UPDATE b
SET b.MemId = a.MemId
FROM dbo.Table_B AS b
INNER JOIN Inserted AS i ON b.EmpId = i.EmpId
INNER JOIN dbo.Table_A AS a ON b.EmpId = a.EmpId

Это обновит только те записи в b, которые также были в таблице insterted. (первая INNER JOIN)

Затем INNER JOIN перейдет в Table_A на EmpId, чтобы получить MemId для обновления ваших записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...