继上次的sql Server空间化任务之后,
笔者又接到新的任务:
当数据库属性字段发生变化时,在不改变业务代码的条件下,自动更新空间数据。
首先想到的解决方案就是触发器。
基本思路:
在数据更新或插入完毕之后,当表的x,y字段任意一个的值发生变化时,即开始更新空间字段数据。
下面以摄像机表videopointinfo为例
字段 |
类型 |
说明 |
videoid |
varchar |
主键ID |
videoname |
varchar |
摄像机名 |
clientx |
number |
经度 |
clienty |
number |
纬度 |
geom |
geometry |
实际坐标 |
-- 为表增加坐标字段 alter table videopointinfo add geom geometry; -- 创建或修改触发器, 创建用create,修改用alter alter trigger tri_videopointinfo on videopointinfo after update,insert as -- 当clientx或clienty有更新时调用 if update(clientx) or update(clienty) begin -- 当clientx或clienty任意一个有空值时设置geom为空 if (select clientx from inserted) is null or (select clienty from inserted) is null begin update v set geom=null from videopointinfo v where exists(select 1 from inserted where videoflag=v.videoflag) Return end update v set geom=geometry::STGeomFromText('POINT('+convert(varchar,CLIENTX)+' '+convert(varchar,CLIENTY)+')',4326) from videopointinfo v where exists(select 1 from inserted where videoflag=v.videoflag) end
最后可以尝试着更新几条数据,测试效果。
再来条开启和禁用触发器的语句
disable trigger trigDB on database --禁用触发器 enable trigger trigDB on database --开启触发器
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。