Измените оператор INSERT..VALUES
на INSERT..SELECT
и установите псевдонимы для всех столбцов.Убедитесь, что псевдонимы соответствуют каждому столбцу в целевой таблице (по умолчанию все столбцы NOT NULL
), и они в том же порядке, в котором они объявлены .Обратите внимание, что оператор SELECT
использует таблицу patientLastNameChange
, потому что MAX()
без GROUP BY
гарантирует, что будет возвращена только одна строка.Я рекомендую использовать COALESCE
для установки MAX()
результата на 0
, если он возвращает NULL
.Затем просто добавьте 1
, чтобы увеличить lastNameChangeID
.Я думаю, что это более читабельно.
CREATE TRIGGER patientLastNameChangeTrigger
ON patient
AFTER UPDATE
AS
BEGIN
DECLARE @oldLastName VARCHAR(255) = (SELECT pt_lastName FROM DELETED);
DECLARE @newLastName VARCHAR(255) = (SELECT pt_lastName FROM INSERTED);
IF @oldLastName <> @newLastName
INSERT INTO dbo.patientLastNameChange (lastnameChangeID, patientID, oldLastName, newLastName, datechanged)
SELECT
COALESCE(MAX(plnc.lastnameChangeID),0)+1 AS lastnameChangeID,
(SELECT patientID FROM INSERTED) AS patientID,
@oldLastName AS oldLastName,
@newLastName AS newLastName,
GETDATE() AS datechanged
FROM patientLastNameChange plnc;
END;