Как добавить «последний обновленный» столбец в таблицу SQL Server 2008 R2? - PullRequest
43 голосов
/ 08 сентября 2011

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

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

Ответы [ 2 ]

62 голосов
/ 08 сентября 2011

Чтобы узнать, какая строка была последний раз обновлена, вам нужно создать новый столбец типа 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
10 голосов
/ 08 сентября 2011

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

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

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

...