sql - 从 varchar 转换为 numeric 时出错
问题描述
我制作了一个历史表以及参考表中内置的触发函数。基于用户可能的名称更改以及记录日期。
我的触发器构建:
目标表:
触发器函数将名称从表中拉出。
但我在转换数据类型时遇到错误。我正在更新的所有数据都是VARCHAR
类型。我在哪里失踪?
解决方案
INSERT..VALUES
将语句更改为INSERT..SELECT
并为所有列设置别名。确保别名与目标表中的每一列匹配(默认为所有NOT NULL
列),并且它们的顺序与声明的顺序相同。请注意,该SELECT
语句使用该patientLastNameChange
表,因为MAX()
没有 aGROUP BY
确保只返回一行。我建议使用COALESCE
将MAX()
结果设置为0
if 它返回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;
推荐阅读
- python - 如何通过使用re python忽略特定字符从字符串中搜索特定单词
- facebook-javascript-sdk - 如何使用带有 javascript sdk 的共享对话框在 fb 时间轴上发布视频?
- reactjs - 将反应项目添加到反应项目?或一页?
- angular - 海量组件订阅还是单次订阅+导出数据?
- python - 通过对像素求和来重新缩放矩阵
- ruby-on-rails - 在 Sidekiq 作业中使用 Kaminari 渲染分页
- html - Asp.net MVC 导航栏
- mysql - MySQL 使用 GROUP BY 时的慢查询
- wordpress-gutenberg - 将多个 Gutenberg 块放在一个文件中 - 块数是否有限制?最后添加的一个不在插入器对话框中
- linear-programming - GLPK 输出格式