SQL Server не поддерживает, к сожалению, CREATE OR REPLACE
.Вам нужно использовать либо CREATE
, либо ALTER
в зависимости от того, какое действие вы делаете.
Также у него нет триггеров на уровне строк.Все затронутые строки доступны вам в псевдотаблицах с именами INSERTED
или DELETED
. Самый простой способ - это два отдельных триггера.
Для вставки
CREATE TRIGGER dbo.tr_i_FE_USER
ON dbo.FE_USER
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO FE_USER_HIST
SELECT userid,username, 'inserted' AS v_action
FROM INSERTED
END
И для обновления
CREATE TRIGGER dbo.tr_u_FE_USER
ON dbo.FE_USER
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO FE_USER_HIST
SELECT userid,username, 'updated' AS v_action
FROM INSERTED /*If you wanted the previous value instead
you could use FROM DELETED */
END
Просто следуя подходу, который я упомянул в комментариях
CREATE TRIGGER dbo.tr_iud_FE_USER
ON dbo.FE_USER
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO FE_USER_HIST
SELECT
ISNULL(i.UserId,d.UserId) AS UserId,
CASE WHEN i.UserId IS NULL THEN d.UserName
ELSE i.UserName
END AS UserName,
CASE WHEN i.UserId IS NULL THEN 'deleted'
WHEN d.UserId IS NULL THEN 'inserted'
ELSE 'updated'
END AS v_action
from INSERTED i FULL OUTER JOIN DELETED d
ON i.UserId = d.USerId
END