Добавление полей timeInsert и timeUpdate: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
 
Строка 25: Строка 25:
     UPDATE t
     UPDATE t
     SET timeUpdate = SYSDATETIME()
     SET timeUpdate = SYSDATETIME()
     FROM dbo.pok_user_group t
     FROM dbo.name_table t
     INNER JOIN inserted i ON t.id = i.id;
     INNER JOIN inserted i ON t.id = i.id;
END;
END;

Текущая версия от 14:09, 15 января 2026

Добавляем 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_table_timeUpdate
ON dbo.name_table
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE t
    SET timeUpdate = SYSDATETIME()
    FROM dbo.name_table 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;