sql-server - 如何在 MSSQL Server 插入或更新触发器上获取行 ID
问题描述
这里我有 2 个触发器,它们在插入或更新值后更新一个字段。我的问题是如何确保我只更新已插入或更新的行上的值,我的更新不包含任何 WHERE 子句
CREATE TRIGGER LocUpdated
ON [SqlDistance].[dbo].[DistantTest]
AFTER UPDATE
AS
IF ( UPDATE (Lat) OR UPDATE (Lon))
BEGIN
UPDATE [SqlDistance].[dbo].[DistantTest]
SET [Geography2] = geography::STGeomFromText('POINT(' + CAST([Lon] AS VARCHAR(20)) + ' ' +
CAST([lat] AS VARCHAR(20)) + ')', 4326)
END;
GO
CREATE TRIGGER LocInserted
ON [SqlDistance].[dbo].[DistantTest]
AFTER INSERT
AS
BEGIN
UPDATE [SqlDistance].[dbo].[DistantTest]
SET [Geography2] = geography::STGeomFromText('POINT(' + CAST([Lon] AS VARCHAR(20)) + ' ' +
CAST([lat] AS VARCHAR(20)) + ')', 4326)
END;
GO
解决方案
你会想做一个JOIN
到inserted
. 这是伪 sql,在没有表 DDL 的情况下,但是,这应该让您走上正轨:
UPDATE D
SET [Geography2] = geography::STGeomFromText('POINT(' + CAST(i.[Lon] AS VARCHAR(20)) + ' ' +
CAST(i.[lat] AS VARCHAR(20)) + ')', 4326)
FROM [dbo].[DistantTest] D --no need to declare the database, we're already in it.
JOIN inserted i ON D.UniqueIdColumn = i.UniqueIdColumn;
推荐阅读
- ruby-on-rails - 自定义设计与为多页面注册创建自己的身份验证
- python - 使用 Pillow 将 PNG 转换为 PBM P4
- html - 当有计数器重置声明时,Firefox 是否违反了规范,因为它奇怪地累积应用计数到 LI 标记?
- javascript - Break 用于事件循环处理而不中断循环
- python - 无法使用包含尾随空格的类名的 Scrapy 提取数据
- docker-compose - docker-compose 带有单独 yml 文件的日志
- c# - UWP Swipeitem 不会看到任何绑定
- google-apps-script - 在 Apps 脚本中接收和响应 Twilio SMS
- python - 改进树莓派上的数据包嗅探/监控
- pointers - 通过反射创建类型并通过引用传递编译但不起作用