Подтвердить что ты не робот

Как добавить столбец "последний обновленный" в таблице SQL Server 2008 R2?

У меня есть таблица в моей базе данных SQL Server 2008 R2 и хотел бы добавить столбец LastUpdated, который будет автоматически изменяться каждый раз, когда строка обновляется. Таким образом, я могу видеть, когда обновлялась каждая отдельная строка.

Похоже, что SQL Server 2008 R2 не имеет типа данных для обработки этого, как это делали предыдущие версии, поэтому я не уверен, что это лучший способ сделать это. Я задавался вопросом об использовании триггера, но что произойдет, когда триггер обновит строку? Будет ли это срабатывать снова и т.д.?

4b9b3361

Ответ 1

Чтобы узнать, какая строка была обновлена ​​последним, вам нужно создать новый столбец типа DATETIME/DATETIME2 и обновить его с помощью триггера. Нет типа данных, который автоматически обновляется с информацией о дате/времени каждый раз, когда строка обновляется.

Чтобы избежать рекурсии, вы можете использовать предложение UPDATE() внутри триггера, например.

ALTER TRIGGER dbo.SetLastUpdatedBusiness 
ON dbo.Businesses 
AFTER UPDATE -- not insert!
AS
BEGIN
    IF NOT UPDATE(LastUpdated)
    BEGIN
        UPDATE t
            SET t.LastUpdated = CURRENT_TIMESTAMP -- not dbo.LastUpdated!
            FROM dbo.Businesses AS t -- not b!
            INNER JOIN inserted AS i 
            ON t.ID = i.ID;
    END
END
GO

Ответ 2

Это не так просто, к сожалению.

Вы можете добавить новое поле DATETIME (или DATETIME2) в свою таблицу, и вы можете дать ему ограничение по умолчанию GETDATE() -, которое установит значение при вставке новой строки.

К сожалению, кроме создания триггера AFTER UPDATE, нет возможности "из коробки" постоянно обновлять его. Триггер как таковой не сложно записать, но вам придется писать его для каждой и каждой отдельной таблицы, которая имеет эту функцию.....