Запись информации в триггер SQL Server - PullRequest
0 голосов
/ 25 июня 2018

У меня есть таблица с именем dsReplicated.matDB и столбец fee_earner.Когда этот столбец обновляется, я хочу записать две части информации:

  • dsReplicated.matDB.mt_code
  • dsReplicated.matDB.fee_earner

изстрока, в которой fee_earner был обновлен.

У меня есть базовый синтаксис для выполнения каких-либо действий при обновлении столбца, но мне нужна рука с вышеперечисленным, чтобы перебрать это.

ALTER TRIGGER [dsReplicated].[tr_mfeModified] 
ON [dsReplicated].[matdb]
AFTER UPDATE
AS 
BEGIN
    IF (UPDATE(fee_earner))
    BEGIN
        print 'Matter fee earner changed to '
    END 
END

1 Ответ

0 голосов
/ 25 июня 2018

Проблема с триггерами в SQL-сервере заключается в том, что они называются по одному на оператор SQL - не один раз в строке.Поэтому, если ваш оператор UPDATE обновляет 10 строк, ваш триггер называется один раз , а псевдотаблицы Inserted и Deleted внутри триггера содержат по 10 строк данных.

Чтобы увидеть, изменилось ли fee_earner, я бы рекомендовал использовать этот подход вместо функции UPDATE():

ALTER TRIGGER [dsReplicated].[tr_mfeModified] 
ON [dsReplicated].[matdb]
AFTER UPDATE
AS 
BEGIN
    -- I'm just *speculating* here what you want to do with that information - adapt as needed!
    INSERT INTO dbo.AuditTable (Id, TriggerTimeStamp, Mt_Code, Old_Fee_Earner, New_Fee_Earner)
        SELECT
            i.PrimaryKey, SYSDATETIME(), i.Mt_Code, d.fee_earner, i.fee_earner
        FROM Inserted i
        -- use the two pseudo tables to detect if the column "fee_earner" has 
        -- changed with the UPDATE operation
        INNER JOIN Deleted d ON i.PrimaryKey = d.PrimaryKey 
                             AND d.fee_earner <> i.fee_earner
END

Псевдостола Deleted содержит значения до UPDATE - вот почему я принимаю d.fee_earner в качестве значения для столбца Old_Fee_Earner в таблице аудита.

Псевдо-таблица Inserted содержит значения после UPDATE - поэтому я беру другие значения из этой Inserted псевдотаблицы для вставки в таблицу аудита.

Обратите внимание, что у вас действительно должен быть неизменяемый первичныйвведите эту таблицу, чтобы этот триггер работал.В любом случае это рекомендуется для любой таблицы данных в SQL Server.

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