Получение ошибки при конвертации из varchar в числовой
Я сделал историческую таблицу вместе с функцией триггера, встроенной в справочную таблицу. Основывается на возможных изменениях имени пользователя, а также на записи даты.
Мой триггер построен:
Целевой стол:
Функция триггера снимает имена со стола.
Но я получаю ошибку при преобразовании типа данных. Все мои данные, которые я обновляю, имеют VARCHAR
тип. Куда я скучаю?
1 ответ
Изменить 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;