首页 > 数据库技术 > 详细

SQLServer 触发器初探

时间:2014-10-14 19:19:41      阅读:318      评论:0      收藏:0      [点我收藏+]

继上次的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 触发器初探

原文:http://ccjava.blog.51cto.com/8646011/1563928

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!