Добавление полей timeInsert и timeUpdate

Материал из Wiki МИАЦ ВО
Версия от 13:54, 15 января 2026; Misha (обсуждение | вклад) (Новая страница: «==Добавляем timeInsert (как created_at)== <pre> ALTER TABLE name_table ADD timeInsert DATETIME2 NOT NULL CONSTRAINT DF_pok_user_group_timeInsert DEFAULT SYSDATETIME(); </pre> ✔ автоматически заполняется при INSERT<br> ✔ аналог DEFAULT CURRENT_TIMESTAMP ==Добавляем timeUpdate (как updated_at)== <pre> ALTER TABLE dbo.pok_user_group ADD timeUpdate DATETIME2 NULL; </pre> ==Триггер для...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Добавляем timeInsert (как created_at)

ALTER TABLE name_table
ADD timeInsert DATETIME2 NOT NULL
    CONSTRAINT DF_pok_user_group_timeInsert
    DEFAULT SYSDATETIME();

✔ автоматически заполняется при INSERT
✔ аналог DEFAULT CURRENT_TIMESTAMP

Добавляем timeUpdate (как updated_at)

ALTER TABLE dbo.pok_user_group
ADD timeUpdate DATETIME2 NULL;

Триггер для автообновления timeUpdate

MSSQL НЕ умеет ON UPDATE CURRENT_TIMESTAMP, поэтому нужен trigger.

CREATE TRIGGER trg_name_talbe_timeUpdate
ON dbo.name_table
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE t
    SET timeUpdate = SYSDATETIME()
    FROM dbo.pok_user_group t
    INNER JOIN inserted i ON t.id = i.id;
END;

(Опционально) Обновлять и при INSERT

Если хочешь, чтобы timeUpdate тоже заполнялся при вставке:

CREATE OR ALTER TRIGGER trg_name_table_timeUpdate
ON dbo.name_table
AFTER INSERT, UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE t
    SET timeUpdate = SYSDATETIME()
    FROM dbo.pok_user_group t
    INNER JOIN inserted i ON t.id = i.id;
END;