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

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
Новая страница: «==Добавляем 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> ==Триггер для...»
 
 
(не показана 1 промежуточная версия этого же участника)
Строка 16: Строка 16:
MSSQL НЕ умеет ON UPDATE CURRENT_TIMESTAMP, поэтому нужен trigger.
MSSQL НЕ умеет ON UPDATE CURRENT_TIMESTAMP, поэтому нужен trigger.
<pre>
<pre>
CREATE TRIGGER trg_name_talbe_timeUpdate
CREATE TRIGGER trg_name_table_timeUpdate
ON dbo.name_table
ON dbo.name_table
AFTER UPDATE
AFTER UPDATE
Строка 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;
</pre>
</pre>
==(Опционально) Обновлять и при INSERT==
==(Опционально) Обновлять и при INSERT==
Если хочешь, чтобы timeUpdate тоже заполнялся при вставке:
Если хочешь, чтобы timeUpdate тоже заполнялся при вставке:

Текущая версия от 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;