Как ссылаться на специальную таблицу триггеров SQL Server, которая называется «обновлено» при ошибке: недопустимое имя объекта «обновлено».? - PullRequest
0 голосов
/ 01 апреля 2019

Когда я выбираю из «обновленной» таблицы в триггере, я получаю сообщение об ошибке:

Msg 208, Level 16, State 1, Procedure foobar, Line 81
Invalid object name 'updated'.

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

Я проверил, что база данных правильная с оператором базы данных USE вверху.


    CREATE TABLE foo ( bar int )
    GO

    CREATE TRIGGER foobar ON foo
        AFTER INSERT, UPDATE
    AS
    SELECT bar FROM inserted ;
    SELECT bar FROM updated  ; --> problem!
    SELECT bar FROM deleted  ;
    GO

    INSERT INTO foo VALUES (3) ;
    UPDATE foo SET bar = 2 WHERE bar = 3;

Я ожидаю увидеть 2 или три (т. Е. Изображение до или после изображения) из выбранных, но select * from updated выдает ошибку: Invalid object name 'updated'.

1 Ответ

1 голос
/ 01 апреля 2019

SQL Server использует два типа таблиц мостов (вставленных и удаленных), чтобы помочь триггеру добиться «вставки», «обновления», «удаления».

Вот ссылка от Microsoft: https://docs.microsoft.com/en-us/sql/relational-databases/triggers/use-the-inserted-and-deleted-tables?view=sql-server-2017

...