Добавление полей timeInsert и timeUpdate: различия между версиями
Перейти к навигации
Перейти к поиску
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> ==Триггер для...» |
Misha (обсуждение | вклад) |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 16: | Строка 16: | ||
MSSQL НЕ умеет ON UPDATE CURRENT_TIMESTAMP, поэтому нужен trigger. | MSSQL НЕ умеет ON UPDATE CURRENT_TIMESTAMP, поэтому нужен trigger. | ||
<pre> | <pre> | ||
CREATE TRIGGER | 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. | 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;