windev的Trigger触发器,能秒SQL吗?

有朋友问,“你是不是在写论文?”

(此处请想象个表情)“好吧,论文继续!”

 

SQL中,触发器可以看成是一种特殊的存储过程,使用inserted临时表来建立数据关联。Windev中,触发器实质上是调用过程Procedure,所以基本上所有事情都可以做,非常自由,通过H.File或Myfile函数,直接获取当前触发的数据表及其当前记录,不需要依靠中间表inserted。同时,SQL中每个数据操作只能设置一个触发器,而windev没有限制。从这三点看,算是秒了SQL吗?

说回windev的触发器。

windev的触发器,有两种,一种是Client Trigger,在客户端触发,另外一种是Server Trigger,在服务端触发。下面重点说说这两者的区别:

1、Client Trigger:客户端触发,HFSQL C/S和经典模式,以及外部数据库都可以使用,触发全局过程,本质上是函数触发(HAdd/HModify/Hdelete/HWrite/HCross,Table类隐式转换为前者,不需要理会)。因为是函数触发,所以程序中直接使用SQL的insert/update/delete等操作,不会触发,比如update类的query就不能触发,直接写的SQL代码(编辑数据类)也不能触发,这是限制。好处是,因为是调用全局过程,所以绝大多数函数都可以使用,非常灵活。定义触发器和全局过程,都需要撸代码。同时,如果触发数据操作,需要赋值后,再使用HAdd等函数操作。

2、Server Trigger:服务端触发,HFSQL经典模式下不能使用,触发服务端的存储过程,本质上是数据表操作触发,如insert/update/delete等操作,所以触发上没有任何限制。但因为是触发存储过程,所以存储过程的函数限制一样适用于它。比如gpwGetUserInfo这样的客户端当前用户信息函数,就不能使用,所以你只能拿到数据表的用户信息,或者当前电脑的IP地址,这是服务端触发器的限制。定义触发器可以通过编辑器,存储过程需要撸代码。同时,应该是在服务端,所以如果触发数据操作,直接赋值就可以,不需要HAdd等函数操作。

 

以上是两者最主要的区别,其它使用都差不多。最后说一下,客户端触发,如果触发的是HAdd等操作,且目标数据表也有触发器,如何避免死循环?前文中有说,客户端触发,本质上是函数触发,所以如果能够避免使用HAdd/HModify/Hdelete/HWrite/HCross,以及tableadd/tablesave等函数,又实现数据表操作,就能避免死循环。windev提供这样的功能吗?自然是提供的,这里卖个关子。有需要的,请关注并留言联系哦!

 

PS:目前我的系统日志Log,全部转到触发器。因为系统自带的Log,推测应该是服务端Log,所以无法获取应用当前操作用户,只能拿到数据表用户或机器IP。

 

posted @   functionMC  阅读(169)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示