当前位置:首页 > 推荐 > 十大排行榜 > 正文

触发器十大品牌排行榜(一线卫浴品牌排行榜)

摘要: 哪些品牌监视器比较好 康联挺好的。我家里用康联。建议楼主电话报警,及时方便。产品描述:标准配置:一...

哪些品牌监视器比较好

康联挺好的。我家里用康联。建议楼主电话报警,及时方便。产品描述:标准配置:一台主机、一个门磁、一个红外探测器、两个遥控器、一个报警器、一个备用充电电源。JFX-2002-F由先进的无线数字遥感高频技术和微电脑CPU控制器(主机)组成。该模型无线数字智能安全报警系统集成了现代高科技与智能软件监控的精神网络。出门时,只要按下遥控器上的保护按钮,家人就会处于防盗状态。一旦门窗被撬开,你的电话会立即自动拨打你预设的6组报警电话号码,并立即提醒你迅速报警,采取紧急措施。当你回家进入住宅时,先按下解除按钮,家用防盗自动报警电话会解除自动报警功能。它处于一般电话状态,是你最听话、最忠实、最可靠的守护者(可选:无线烟雾探测器、无线气体探测器、无线对射器、卷闸门磁铁、无线应急按钮、信号中继器等。).功能参数:主机由微电脑CPU控制器(主机)无线布。无施工布线,灵敏度高,抗干扰强10秒自录语音,数字语音播报报警无线遥控报警/报警消除,真正的无延时报警。报警发生后,具有远程布防/撤防功能,车主输入正确密码后可通过电话远程布防/撤防系统。有110分贝的警笛通知邻居(也可以关闭警笛无声拨号报警)安装操作简单,就像普通电话一样,买了就用,不影响房屋布局。发生报警时,报警电话会立即自动拨打您预设的报警电话号码,并立即提醒您采取相应的应急措施,保护家人的安全。可选门窗感应触发器的数量可多可少,完全可以满足您对不同控制点的防范需求。可接听SK/DTMF双模来电显示,适配国内外各种交换机。具有远程功能,可同时随时启动报警器,震慑窃贼。可预设无声报警或有声报警(即是否开启报警)具有被叫抢线功能。当用户家中无人时,有人试图从外面占用报警线进行盗窃。报警被盗时,系统会自动抢线并拨打报警。可与电脑报警中心联网。计算机控制中心接到报警后,可自动调出报警用户数据,实时显示在计算机屏幕上,并区分报警类别。具有信息保护功能,输入的用户报警电话号码和报警录音永远不会丢失,系统会实时自动检测输入的用户信息。万一电网冲击造成数据损坏,系统会自动修复,保证报警的可靠性。备用电源容量大。选择该电源的用户,系统在断电情况下可连续工作35小时以上,并会自动充满备用。有电话分机接口,方便用户使用分机的技术参数:主机箱(长*宽*高):34 x 25 x 7.8cm 主机电源:交流转DC电源转换器(220V/9V),输出9VDC300mA。待机电流:20mA,报警电流:150mA 工作环境条件:室内,环境温度-10 ~ 50,相对湿度90%,大气压86 ~106Kpa。报警接收方式:无线传输输出,传输距离 150m 录音信息:10秒。存储电话号码:6组,电话号码长度:16位。主机外部振铃分贝:110dB 双音拨号单频电平:环路电流80mA 35mA 18mA高频组-7 DBM 3 db-7 DBM 3 db-7 DBM 5 db-7 DBM 3 db低频组-9 DBM 3 b-9 db 5 db-9 db 5 db-9 db 5 db-9 db 5 db-3 db 8、高低频组电平差:2 1dB、频率偏差:小于1.5% 9、功耗:待机0

请问智能家居有哪些品牌?小米和易微联比怎么样?

易威廉,尤其是sonoff品牌智能WiFi开关组件,以其极低的价格和丰富好玩的第三方固件,成为众多极客玩家低成本改造智能家居的首选。一个比小米米便宜很多的智能家居方案,易sonoff,全套体验评测。作为一个智能家居玩家,我自然买了一些sonoff的智能家居组件。我目前用的是两个sonoff单火wifi开关,分别实现了主卧和次卧的吸顶灯的智能控制(详细评测见我之前的文章《30块钱让传统灯变智能(远程语音可控)-sonoff单火模块实战评测》),一个两墙单火开关实现了客厅和餐厅两个灯的智能控制。最近入手了国内用户不常用的sonoff射频433mhz网关,以及淘宝购买的一些433射频门磁,身体传感器,漏水传感器。这些组合成了低价版的小米智能家居套装。这样就可以实现易微联版的智能家居自动化,比如晚上开门,自动开灯。比小米米家便宜很多的智能家居解决方案。为什么要从易威廉索诺夫的智能家居套件入手?请看下面小米系和亿维联络智能家居产品价格对比表。一个比小米米家便宜很多的智能家居解决方案,易索诺夫全套体验评测,实现了我家两室两厅的智能照明改造需求。易威廉的价格不到小米的三分之一。除了价格优势,易也足够开放。目前易威廉支持国内天猫精灵、百度小度、小米萧艾智能音箱的语音控制,当然也支持国外的Google home、亚马逊Alexa、IFTTT;还有可随意刷的高游戏性第三方固件,以及众多网友开发的访问homeassistant的插件,让易维联智能家居产品的可玩性发挥到极致。今天我们重点介绍一下以sonoff射频桥为网关的智能家居自组织封装,在国内几乎没人评价。

并介绍一下其接入开源智能家居平台homeassistant进阶玩法。开箱篇1、sonoff RF BRIDGE网关开箱。大家先来看一下包装正面,产品的名称为SONOFF RF BRIDGE 433mhz,因为该产品主要在国外销售,包装全是英文,支持的智能家居平台也只写了亚马逊的Alexa和Google home。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测我们来看一下包装背面。上面是该产品系统框架图来说明该射频网关的作用。下面的英文说明了该网关的作用:用该射频网关复制你传统的射频遥控器的按键,你就可以用手机APP在任何地方远控制你的射频设备了。简单来说它就是433mhz射频版的万能遥控器(功能有点类似米家红外版万能遥控器)。其实它不仅是射频万能遥控器,他还是433mhz射频传感器的网关,通过该网关传统的价格低廉的433mhz射频门磁传感器、人体传感器、水浸传感器、烟雾传感器等,就瞬间变智能传感器了。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测我们再来看一下包装侧面。简单说了一下产品规格。型号是RF BRIDGE 433,电源是micro USB 5v/1a,WIFI是2.4G WiFi,射频是433mhz,不支持315mhz,尺寸只有62*62*20(mm),真的很小巧。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测网关实物来了。包装内物品只有网关本体和一张简单说明书的纸片,电源及电源线需要自备,产品正面是sonoff logo,同时也是电源指示灯。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测背面可以看到产品相关信息,还有指示灯和配网按键及电源接口布局。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测正常接入网络后的样子。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测2、门窗传感器、人体传感器、水浸传感器开箱因为易微联原装的门窗传感器、人体传感器比较贵,且没有水浸传感器和烟雾传感器,所以我淘宝购买的433mhz传感器,我给大家试试水看看能否与sonoff RF智能网关兼容。我们先来看一下sonoff自己的价格吧。sonoff门磁传感器39元,人体传感器58元,sonoff价格都这么不亲民了嘛。大家都是433mzh的传感器,凭啥你这么贵。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测来看一下万能淘宝的价格吧。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测这价格瞬间亲民了很多,这才是易微联sonoff的价格嘛。传感器开箱我就简单展示一下吧。这个是双向门磁,意思是开和关会发射两个不同的信号,很多433mhz门磁只有门开时才发射信号,门关是不会发射信号,单向的门磁8元,双向的11元,我买的双向的。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测这是附赠的粘贴门磁的双面胶。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测这个是人体传感器。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测还有附赠的安装支架比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测下面这个水浸传感器,也可以作为水位传感器用。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测使用篇我们先来看看易微联app的使用体验吧1、首先我们把sonoff FR bridge接入自家的WiFi,方法如下图所示。1、首先我们把sonoff FR bridge接入自家的WiFi,方法如下图所示。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测2、添加拷贝遥控器我们前面说过RF bridge其实是一个万能射频遥控器,我们可以复制我们手头的传统射频遥控器,比如车库遥控器、窗帘遥控器等。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测具体添加步骤也很简单。点击RF网关操作界面右下角的“+”进行设备添加。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测选择添加遥控器的按键数量或类型,然后点击右上角的保存按键。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测此时用的传统射频遥控器对着网关按下对应的按键,网关会学习并保存学习到的按键。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测然后回到RF网关就能看到你添加的射频遥控器了。这时你按下APP中的按键,网关就会发射对应的射频信号,从而取代了你传统的车库、窗帘射频遥控器了。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测3、添加传感器等sonoff RF 网关把门窗传感器、人体传感器、水浸传感器等统一称为报警器,所以要添加这些传感器,和添加遥控器类似,只是类型选择报警器即可。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测网关进入学习模式后,想办法让你的传感器发射对应信号即可,比如手动分离门磁,在人体传感器前挥手等。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测下面就是我添加的门窗传感器。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测经过我的实测淘宝第三方门窗传感器和水浸传感器接入成功,淘宝第三方人体传感器能学习成功,但是app接收不到通知,应该是翻车了,后续我再深入研究一下。4、智能场景体验买这些易微联sonoff RF网关及传感器智能组件,其实就是为了实现家居自动化。易微联称之为场景。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测下面我们就看一下易微联的场景设置吧。点击“添加”按键,进行场景编辑。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测我们首先需要选择自动化的触发器,点击“如果”下的“添加”按钮比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测我们可以看到我们可以选择四类触发器,分别是点击执行(这个和手动操作没什么区别,不赘述了)、定时、日出日落、智能设备。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测我们先来看定时吧。我们可以选择时间及按周计算的重复周期,无智能节假日可选。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测再来看日出日落。因为日出日落每个城市都不一样,所以我们要选择自己所在的城市,然后我们可以选择日出,然后打开窗帘,日落打开灯等设置。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测最后我们看重头戏-智能设备。我们可以看到接入网关的报警器都可以作为自动化的触发器。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测所以我们可以实现夜晚当人经过人体传感器时自动打开小夜灯。呵呵,想的美,这个官方宣传图其实实现不了的(我是不是可以告他虚假宣传?),因为易微联的自动化只能设置触发器,不能设置执行条件,也就是说易微联只能实现无论白天晚上只要有人就开灯,而不能实现只有晚上有人才开灯。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测小结易微联的场景自动化(智能联动)才刚刚起步,目前可用性非常差。想简单,开箱即用,还是选择米家系吧。不过就像我前面说的,易微联sonoff可玩性其实不在于它自身的APP,而在于第三方的固件及home assistant插件。真的是金钱不够,自己动手来凑。进阶玩法篇我们首先在不刷第三方固件的情况下,看看sonoff homeassistant插件使用体验1、sonoff homeassistant 插件安装配置①下载homeassistant插件。其实sonoff homeassistant的插件有很多,刷固件的,不刷固件sonoff云端服务器版的等等。这里向大家强烈推荐云端和局域网皆可的版本。下载地址在https://github.com/AlexxIT/SonoffLAN 。打开该网页,按下图所示下载插件压缩包。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测②解压插件压缩包,然后放入homeassistant第三方组件中。找到刚才下载的插件压缩包,SonoffLAN 2.2.1.zip,右键选择解压到SonoffLAN 2.2.1进行解压。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测如果之前homeassistant自己没用过第三方插件,就找到解压后文件中的sonoffLAN2.2.1文件中custom_components文件,然后直接复制粘贴到homeassistant的配置文件下,比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测如果你已经使用过其他第三方组件,已经有custom_components文件夹,则找到解压后文件中的sonoffLAN2.2.1文件中custom_components下sonoff文件夹,然后把sonoff复制粘贴到homeassistant已有的custom_components文件夹下即可。3、配置打开你homeassistant的配置文件configuration.ymal然后首先添加如下配置。下图是我给大家的配置示例及说明。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测配置完毕重启homeassistant。我们可以在开发者界面-状态栏,看到所有设备,然后找到新添加的sonoff设备,最后在UI前端添加显示界面即可。4、homeassistant插件体验我们把sonoff设备接入homeassistant之后,我们就可以不用易微联app了,(接入homeassistant之后的sonoff设备如图)我们可以直接在homeassistant中控制查看设备状态。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测此外,借助homeassistant我们也成功把双向门磁的两个信号合成一个拥有on /off两个状态的门磁设备。也把水浸及人体只有一个触发信号的设备变成了具有on/off的设备,更重要的是借助homeassistant强大的自动化,我们终于可以实现在日落后你回家后,开门的一瞬间,你客厅的吸顶灯就自动打开了,再也不用抹黑开灯了。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测总结经过一段时间的使用,我的结论就是对于普通不喜欢折腾DIY的用户,还是买小米这种开箱即用的智能家居设备合适,对于喜欢DIY并且对价格敏感的用户,我还是建议购买易微联尤其是sonoff品牌的智能家居产品,它不仅价格低廉,其开放性可玩性比小米米家系要高。(在这里也透露一个小米米家系人体传感器的一个通病,上报时间间隔不能小于60s的问题,就是这次上报有人后,一分钟内它一直会认为有人,一分钟后才默认没人,才能发射下次有人的信号。而淘宝十几块钱的433mzh人体传感器是不存在这个问题,几秒后就可以二次上报有人信号。对于时间特别敏感的自动化设置,这点很重要。)易微联系产品的可玩性除了可以接入homeassistant外,更在于其可以刷功能更强大的第三方的固件。下面是给自己挖坑时间,接下来我会为大家带来sonoff RF bridge刷Tasmota和OpenMQTTGateway固件的玩法。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测也可能尝试硬件DIY改造,给RF bridge添加红外遥控,让其成为红外射频二合一的万能遥控器。比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测比小米米家便宜得多的智能家居方案易微联sonoff全套使用体验评测最后各位看官老爷,如果你是智能家居、电子产品爱好者,请一键三连,关注、点赞、收藏,你们的举手之劳就是我创作的动力。码字不易,希望得到您的支持。

请问智能家居有哪些品牌?小米和易微联比怎么样?


什么是触发器

SQL触发器实例1定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 我为什么要使用触发器?比如,这么两个表: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord( --学生借书记录表 BorrowRecord int identity(1,1), --流水号 StudentID int , --学号 BorrowDate datetime, --借出时间 ReturnDAte Datetime, --归还时间 ... ) 用到的功能有: 1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); 2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。 等等。 这时候可以用到触发器。对于1,创建一个Update触发器: Create Trigger truStudent On Student --在Student表中创建触发器 for Update --为什么事件触发 As --事件触发后所要做的事情 if Update(StudentID) begin Update BorrowRecord Set StudentID=i.StudentID From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted临时表 Where br.StudentID=d.StudentID end 理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。 一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是: 虚拟表Inserted 虚拟表Deleted 在表记录新增时 存放新增的记录 不存储记录 修改时 存放用来更新的新记录 存放更新前的记录 删除时 不存储记录 存放被删除的记录 一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。 对于2,创建一个Delete触发器 Create trigger trdStudent On Student for Delete As Delete BorrowRecord From BorrowRecord br , Delted d Where br.StudentID=d.StudentID 从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。 SQL触发器实例2/* 建立虚拟测试环境,包含:表[卷烟库存表],表[卷烟销售表]。 请大家注意跟踪这两个表的数据,体会触发器到底执行了什么业务逻辑,对数据有什么影响。 为了能更清晰的表述触发器的作用,表结构存在数据冗余,且不符合第三范式,这里特此说明。 */USE Master GO IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’U’ AND NAME = ’卷烟库存表’) DROP TABLE 卷烟库存表 GO IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’U’ AND NAME = ’卷烟销售表’) DROP TABLE 卷烟销售表 GO --业务规则:销售金额 = 销售数量 * 销售单价 业务规则。 CREATE TABLE 卷烟销售表 ( 卷烟品牌 VARCHAR(40) PRIMARY KEY NOT NULL, 购货商 VARCHAR(40) NULL, 销售数量 INT NULL, 销售单价 MONEY NULL, 销售金额 MONEY NULL ) GO --业务规则:库存金额 = 库存数量 * 库存单价 业务规则。 CREATE TABLE 卷烟库存表 ( 卷烟品牌 VARCHAR(40) PRIMARY KEY NOT NULL, 库存数量 INT NULL, 库存单价 MONEY NULL, 库存金额 MONEY NULL ) GO --创建触发器,示例1 /* 创建触发器[T_INSERT_卷烟库存表],这个触发器较简单。 说明: 每当[卷烟库存表]发生 INSERT 动作,则引发该触发器。 触发器功能: 强制执行业务规则,保证插入的数据中,库存金额 = 库存数量 * 库存单价。 注意: [INSERTED]、[DELETED]为系统表,不可创建、修改、删除,但可以调用。 重要: 这两个系统表的结构同插入数据的表的结构。 */IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’TR’ AND NAME = ’T_INSERT_卷烟库存表’) DROP TRIGGER T_INSERT_卷烟库存表 GO CREATE TRIGGER T_INSERT_卷烟库存表 ON 卷烟库存表 FOR INSERT AS --提交事务处理 BEGIN TRANSACTION --强制执行下列语句,保证业务规则 UPDATE 卷烟库存表 SET 库存金额 = 库存数量 * 库存单价 WHERE 卷烟品牌 IN (SELECT 卷烟品牌 from INSERTED) COMMIT TRANSACTION GO /* 针对[卷烟库存表],插入测试数据: 注意,第一条数据(红塔山新势力)中的数据符合业务规则, 第二条数据(红塔山人为峰)中,[库存金额]空,不符合业务规则, 第三条数据(云南映像)中,[库存金额]不等于[库存数量]乘以[库存单价],不符合业务规则。 第四条数据库存数量为0。 请注意在插入数据后,检查[卷烟库存表]中的数据是否 库存金额 = 库存数量 * 库存单价。 */INSERT INTO 卷烟库存表(卷烟品牌,库存数量,库存单价,库存金额) SELECT ’红塔山新势力’,100,12,1200 UNION ALL SELECT ’红塔山人为峰’,100,22,NULL UNION ALL SELECT ’云南映像’,100,60,500 UNION ALL SELECT ’玉溪’,0,30,0 GO --查询数据 SELECT * FROM 卷烟库存表 GO /* 结果集 RecordId 卷烟品牌 库存数量 库存单价 库存金额 -------- ------------ -------- ------- --------- 1 红塔山新势力 100 12.0000 1200.0000 2 红塔山人为峰 100 22.0000 2200.0000 3 云南映像 100 60.0000 6000.0000 4 玉溪 0 30.0000 .0000 (所影响的行数为 4 行) */--触发器示例2 /* 创建触发器[T_INSERT_卷烟销售表],该触发器较复杂。 说明: 每当[卷烟库存表]发生 INSERT 动作,则引发该触发器。 触发器功能: 实现业务规则。 业务规则: 如果销售的卷烟品牌不存在库存或者库存为零,则返回错误。 否则则自动减少[卷烟库存表]中对应品牌卷烟的库存数量和库存金额。 */IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’TR’ AND NAME = ’T_INSERT_卷烟销售表’) DROP TRIGGER T_INSERT_卷烟销售表 GO CREATE TRIGGER T_INSERT_卷烟销售表 ON 卷烟销售表 FOR INSERT AS BEGIN TRANSACTION --检查数据的合法性:销售的卷烟是否有库存,或者库存是否大于零 IF NOT EXISTS ( SELECT 库存数量 FROM 卷烟库存表 WHERE 卷烟品牌 IN (SELECT 卷烟品牌 FROM INSERTED) ) BEGIN --返回错误提示 RAISERROR(’错误!该卷烟不存在库存,不能销售。’,16,1) --回滚事务 ROLLBACK RETURN END IF EXISTS ( SELECT 库存数量 FROM 卷烟库存表 WHERE 卷烟品牌 IN (SELECT 卷烟品牌 FROM INSERTED) AND 库存数量 <= 0 ) BEGIN --返回错误提示 RAISERROR(’错误!该卷烟库存小于等于0,不能销售。’,16,1) --回滚事务 ROLLBACK RETURN END --对合法的数据进行处理 --强制执行下列语句,保证业务规则 UPDATE 卷烟销售表 SET 销售金额 = 销售数量 * 销售单价 WHERE 卷烟品牌 IN (SELECT 卷烟品牌 FROM INSERTED) DECLARE @卷烟品牌 VARCHAR(40) SET @卷烟品牌 = (SELECT 卷烟品牌 FROM INSERTED) DECLARE @销售数量 MONEY SET @销售数量 = (SELECT 销售数量 FROM INSERTED) UPDATE 卷烟库存表 SET 库存数量 = 库存数量 - @销售数量, 库存金额 = (库存数量 - @销售数量)*库存单价 WHERE 卷烟品牌 = @卷烟品牌 COMMIT TRANSACTION GO --请大家自行跟踪[卷烟库存表]和[卷烟销售表]的数据变化。 --针对[卷烟销售表],插入第一条测试数据,该数据是正常的。 INSERT INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额) SELECT ’红塔山新势力’,’某购货商’,10,12,1200 GO --针对[卷烟销售表],插入第二条测试数据,该数据 销售金额 不等于 销售单价 * 销售数量。 --触发器将自动更正数据,使 销售金额 等于 销售单价 * 销售数量。 INSERT INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额) SELECT ’红塔山人为峰’,’某购货商’,10,22,2000 GO --针对[卷烟销售表],插入第三条测试数据,该数据中的卷烟品牌在 卷烟库存表中找不到对应。 --触发器将报错。 INSERT INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额) SELECT ’红河V8’,’某购货商’,10,60,600 GO /* 结果集 服务器: 消息 50000,级别 16,状态 1,过程 T_INSERT_卷烟销售表,行 15 错误!该卷烟不存在库存,不能销售。 */--针对[卷烟销售表],插入第三条测试数据,该数据中的卷烟品牌在 卷烟库存表中库存为0。 --触发器将报错。 INSERT INTO 卷烟销售表(卷烟品牌,购货商,销售数量,销售单价,销售金额) SELECT ’玉溪’,’某购货商’,10,30,300 GO /* 结果集 服务器: 消息 50000,级别 16,状态 1,过程 T_INSERT_卷烟销售表,行 29 错误!该卷烟库存小于等于0,不能销售。 */--查询数据 SELECT * FROM 卷烟库存表 SELECT * FROM 卷烟销售表 GO /* 补充: 1、本示例主要通过一个简单的业务规则实现来进行触发器使用的说明,具体的要根据需要灵活处理; 2、关于触发器要理解并运用好 INSERTED ,DELETED 两个系统表; 3、本示例创建的触发器都是 FOR INSERT ,具体的语法可参考: Trigger语法 CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] --用于加密触发器 { { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) { comparison_operator } column_bitmask [ ...n ] } ] sql_statement [ ...n ] } } 4、关于触发器,还应该注意 (1)、DELETE 触发器不能捕获 TRUNCATE TABLE 语句。 (2)、触发器中不允许以下 Transact-SQL 语句: ALTER DATABASE CREATE DATABASE DISK INIT DISK RESIZE DROP DATABASE LOAD DATABASE LOAD LOG RECONFIGURE RESTORE DATABASE RESTORE LOG (3)、触发器最多可以嵌套 32 层。 */--修改触发器 --实质上,是将 CREATE TRIGGER ... 修改为 ALTER TRIGGER ...即可。 --删除触发器 DROP TRIGGER xxx GO --删除测试环境 DROP TABLE 卷烟库存表 GO DROP TABLE 卷烟销售表 GO DROP TRIGGER T_INSERT_卷烟库存表 GO DROP TRIGGER T_INSERT_卷烟销售表 GO ################################################################## 触发器的基础知识和例子 :create trigger tr_name on table/view {for | after | instead of } [update][,][insert][,][delete] [with encryption] as {batch | if update (col_name) [{and|or} update (col_name)] } 说明: 1 tr_name :触发器名称 2 on table/view :触发器所作用的表。一个触发器只能作用于一个表 3 for 和after :同义 4 after 与instead of :sql 2000新增项目afrer 与 instead of 的区别 After 在触发事件发生以后才被激活,只可以建立在表上 Instead of 代替了相应的触发事件而被执行,既可以建立在表上也可以建立在视图上 5 insert、update、delete:激活触发器的三种操作,可以同时执行,也可选其一 6 if update (col_name):表明所作的操作对指定列是否有影响,有影响,则激活触发器。此外,因为delete 操作只对行有影响, 所以如果使用delete操作就不能用这条语句了(虽然使用也不出错,但是不能激活触发器,没意义)。 7 触发器执行时用到的两个特殊表:deleted ,inserted deleted 和inserted 可以说是一种特殊的临时表,是在进行激活触发器时由系统自动生成的,其结构与触发器作用的表结构是一 样的,只是存放 的数据有差异。 续 下面表格说明deleted 与inserted 数据的差异 deleted 与inserted 数据的差异 Inserted 存放进行insert和update 操作后的数据 Deleted 存放进行delete 和update操作前的数据 注意:update 操作相当于先进行delete 再进行insert ,所以在进行update操作时,修改前的数据拷贝一条到deleted 表中,修改后 的数据在存到触发器作用的表的同时,也同时生成一条拷贝到insered表中

发表评论

  • 人参与,0条评论