Добавление полей timeInsert и timeUpdate: различия между версиями
Перейти к навигации
Перейти к поиску
Misha (обсуждение | вклад) |
Misha (обсуждение | вклад) |
||
| Строка 25: | Строка 25: | ||
UPDATE t | UPDATE t | ||
SET timeUpdate = SYSDATETIME() | SET timeUpdate = SYSDATETIME() | ||
FROM dbo. | 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;