从 varchar 转换为 numeric 时出错
Getting an error converting from varchar to numeric
我制作了一个历史 table 以及参考 table 中内置的触发函数。基于用户可能的名称更改以及记录日期。
我的触发器构建:
目标 table:
触发器函数从 table 中提取名称。
但是我在转换数据类型时遇到错误。我正在更新的所有数据都是 VARCHAR
类型的。我哪里不见了?
将 INSERT..VALUES
语句更改为 INSERT..SELECT
并为所有列设置别名。确保别名与目标 table 中的每一列相匹配(默认所有 NOT NULL
列),并且 它们的顺序与声明的顺序相同 。
请注意,SELECT
语句使用 patientLastNameChange
table,因为没有 GROUP BY
的 MAX()
确保只返回一行。
如果 returns NULL
,我建议使用 COALESCE
将 MAX()
结果设置为 0
。然后只需添加 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;
我制作了一个历史 table 以及参考 table 中内置的触发函数。基于用户可能的名称更改以及记录日期。
我的触发器构建:
目标 table:
触发器函数从 table 中提取名称。
但是我在转换数据类型时遇到错误。我正在更新的所有数据都是 VARCHAR
类型的。我哪里不见了?
将 INSERT..VALUES
语句更改为 INSERT..SELECT
并为所有列设置别名。确保别名与目标 table 中的每一列相匹配(默认所有 NOT NULL
列),并且 它们的顺序与声明的顺序相同 。
请注意,SELECT
语句使用 patientLastNameChange
table,因为没有 GROUP BY
的 MAX()
确保只返回一行。
如果 returns NULL
,我建议使用 COALESCE
将 MAX()
结果设置为 0
。然后只需添加 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;