Получение ошибки при конвертации из varchar в числовой - PullRequest
0 голосов
/ 10 декабря 2018

Я создал историческую таблицу вместе с функцией триггера, встроенной в справочную таблицу.Основан на возможных изменениях имени пользователя, а также на записи даты.

Мой триггер построен:

enter image description here

Таблица целей:

enter image description here

Функция триггера вытаскивает имена из таблицы.

enter image description here

Но я получаю ошибку при преобразовании типа данных.Все мои данные, которые я обновляю, имеют тип VARCHAR.Куда я скучаю?

1 Ответ

0 голосов
/ 10 декабря 2018

Измените оператор 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...