中易网

存储过程和触发器有什么不同

答案:2  悬赏:50  
解决时间 2021-02-02 13:53
存储过程和触发器有什么不同
最佳答案
首先介绍一下触发器:
触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于顾客的当前帐户状态插入定单。

触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。有关详细信息,请参见表关系。

使用触发器的优点
触发器的优点如下:

触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。

触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。

触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。
再介绍存储过程:
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。总的来说,存储过程具有以下一些优点:

◆存储过程允许标准组件式编程

◆存储过程能够实现较快的执行速度

◆存储过程能够减少网络流量

◆存储过程可被作为一种安全机制来充分利用

使用 SQL Server 中的存储过程而不使用存储在客户计算机本地的 Transact-SQL 程序的优势有:

允许模块化程序设计。
只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。

允许更快执行。
如果某操作需要大量 Transact-SQL 代码或需重复执行,存储过程将比 Transact-SQL 批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程的内存中版本。每次运行 Transact-SQL 语句时,都要从客户端重复发送,并且在 SQL Server 每次执行这些语句时,都要对其进行编译和优化。

减少网络流量。
一个需要数百行 Transact-SQL 代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。

可作为安全机制使用。
即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限
全部回答
create table a --商户表 ( id_a int identity(1,1), sales varchar(50) ) create table b --物品表 ( id_b int identity(1,1), goods varchar(50), ) create table c --关系表 ( id_c int identity(1,1), id_a int, id_b int, price money ) create table save_table --保存表 ( id_save int identity(1,1), id_b int, price_old money, price_new money, update_time datetime ) --存储过程检索指定商品在不同商店的销售价格和平均价格 create proc findprice @goods varchar(50) as --不同商店销售价格 select a.sales,b.goods,c.price from c join b on c.id_b=b.id_b join a on a.id_a=c.id_a where b.goods=@goods --商品平均值 select avg(c.price) from c join b on c.id_b=b.id_b join a on a.id_a=c.id_a where b.goods=@goods go --触发器设计实现,当修改商品价格时,将修改前的值、修改后的值和修改日期保存到一个表中供以后查询 create trigger findtrigger on c for update as declare @price_old money,@price_new money,@id_b int select @id_b=id_b,@price_new=price from inserted select @price_old=price from deleted insert into save_table(id_b,price_old,price_new,update_time)values(@id_b,@price_old,@price_new,getdate()) go
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
奥迪A4的电孑驻车开关多少钱(09款)
南洪村在哪里啊,我有事要去这个地方
如何把微信下载到诺基亚800里?
北京泡温泉要多少钱?
肉里面长了硬疙瘩,挤也挤不出来,不痛不痒的,
旺顺宾馆地址在什么地方,想过去办事
黄忆慈的胸有多大
我的世界如何防止水源被冻?
到火车站送一个女孩,她说没必要,最后我就回
新购固定资产提折旧需不需要报税务局?或是别
小王超市地址在什么地方,想过去办事
现在送女友什么最流行什么啊?
双程鑫汽车租赁公司在哪里啊,我有事要去这个
谁有好一点的搜索器?类似vagaa
姜堰市溱潼私营个体经济协会在什么地方啊,我
推荐资讯
李家庄子村地址在什么地方,想过去办事
mbc kbs sbs有几个频道
1973年阴历4月26曰生的人五行里面是属于哪一
男生探讨内裤,另一个男生就说好恶心啊,为什
我电脑刚装系统 出现‘’‘’‘此程序存在已
仿照白杨礼赞中排比的句子写根
宁波儿童公园有那些好玩项目
我听朋友说贵州凯里盛产银饰品,在那里能买到
“噶好”是哪里的方言啊??
有什么播放器可以免费看电影的。
安吉海欣电器地址在哪,我要去那里办事
河北石油职业技术学院西区-第四教学楼我想知
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?