首页 > 代码库 > SQLServer 触发器初探
SQLServer 触发器初探
继上次的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 --开启触发器
参考文档:msdn - create trigger
SQLServer 触发器初探
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。