ОБНОВЛЕНИЕ ВНУТРИ ЭТОГО ПОЧТЫ
У меня есть две таблицы в SQL Server, упрощенное представление каждой из которых приведено ниже.
Table1
| ObjectID | Name | Email |
+----------+------+-------+
| 1 | Ben | |
| 2 | Tom | |
Table2
| ObjectID | Name | Email |
+-----------+------+---------------+
| 52 | Ben | ben@email.com |
| 53 | Tom | tom@email.com |
Я хочу создать триггер в базе данных, который обновляет table1, в результате чего при обновлении поля имени срабатывает триггер и вставляется адрес электронной почты, который можно найти в таблице 2.
Примечание: в обеих таблицах есть еще много столбцов
Примечание2: когда строка вставляется в таблицу 1, она получает ТОЛЬКО ObjectID, затем выполняется обновление, когда пользователь добавляет имя.
После того, как пользователь добавляет это имя, я хочу, чтобы база данных побежала и посмотрела на table2, нашла подходящее имя, вернулась к table1 и записала данные в.
Я написал (безуспешно) приведенный ниже код, я пытался использовать update()
и кучу других вещей, но я чувствую, что я далеко от цели:
CREATE TRIGGER "acc_insert_email"
ON TABLE1
AFTER UPDATE
AS
BEGIN
INSERT INTO TABLE1(email)
SELECT i.email
FROM TABLE1 t
INNER JOIN TABLE2 i ON t.email = i.email
END
Кто-нибудь может направить меня обратно в правильном направлении?
Заранее спасибо.
Итак, я проверил ответ, предоставленный @Ezlo, но мне не повезло ... Я немного изменил его, чтобы вместо этого вставить слово TEST в столбец, чтобы посмотреть, будет ли оно вообще так, но это также не имеет эффект. Это код, который у меня есть в настоящее время, обратите внимание, что я использовал реальные имена таблиц и столбцов:
CREATE TRIGGER "gisadmin"."acc_UpdateOfficerDetails" ON NOXIOUS_WEED_INSPECTION_POINT AFTER UPDATE
AS
BEGIN
IF UPDATE(authorised_officer_email)
BEGIN
UPDATE T SET
authorised_officer_email = 'TEST'
FROM
inserted AS I
INNER JOIN NOXIOUS_WEED_INSPECTION_POINT AS T ON I.authorised_officer = T.authorised_officer
LEFT JOIN AUTH_DB.authlive.dbo.acc_weave_emp_details AS N ON I.authorised_officer = N.cus_idd
END
END
authorised_officer
и cus_idd
- это имя пользователя персонала (я успешно выполнил простое объединение этих двух полей, оно отлично работает, поэтому я исключил наличие двух разных типов данных)
Так что я озадачен тем, почему этот триггер даже не вставляет для меня простой текст "ТЕСТ".
Есть идеи?
Ниже приведен окончательный код, который отвечает на мой оригинальный вопрос, работает фантастически! Спасибо @ EzLo
CREATE TRIGGER "gisadmin"."acc_UpdateOfficerDetails" ON NOXIOUS_WEED_INSPECTION_POINT AFTER
UPDATE AS BEGIN IF
UPDATE
(authorised_officer) BEGIN
UPDATE
T
SET
authorised_officer_email = A.mto_lst
FROM
inserted AS I
INNER JOIN
NOXIOUS_WEED_INSPECTION_POINT AS T
ON
I.authorised_officer = T.authorised_officer
LEFT JOIN
AUTH_DB.authlive.dbo.acc_weave_emp_details AS A
ON
I.authorised_officer = A.cus_idd
END
END