微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐