.NET重构(五):存储过程、触发器和函数的区别

导读:在触发器的学习过程中,师傅讲了它的耦合性高,建议我能用存储过程,那到底什么是存储过程呢,自己也不是特别了解,还有就是,触发器也算是一种特殊的存储过程,为什么就不建议多用呢?接下来,就谈谈触发器、存储过程以及函数的区别!

一、存储过程

1,定义

存储过程(Stored Procedure):是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

PS:根据我自己的使用情况,我感觉存储过程其实就是一些写好的SQL语句集,就像是函数方法一样,都写好了封起来,需要用的时候,直接调用。

2,特点

1)、变量说明
2)、ANSI(美国国家标准化组织)兼容的SQL命令(如Select,Update….)
3)、一般流程控制命令(if…else…、while….)
4)、内部函数

3,实例说明

 

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">ALTER PROCEDURE [dbo].[QueryGroup]
	-- Add the parameters for the stored procedure here
	
	@cmbField1 varchar(10),
	@cmbOperation1 varchar(10),
	@txtContent1 varchar(10),
	@cmbField2 varchar(10),
	@cmbOperation2 varchar(10),
	@txtContent2 varchar(10),
	@cmbField3 varchar(10),
	@cmbOperation3 varchar(10),
	@txtContent3 varchar(10),
	@cmbRelation1 varchar(10),
	@cmbRelation2 varchar(10),
	@tableName varchar(20)
AS
	declare @TempSql varchar(500)--临时存放sql语句  
BEGIN
	SET @TempSql='SELECT * FROM '+@tableName +' WHERE ' +@cmbField1 +@cmbOperation1+char(39) + @txtContent1 + char(39)  
    if @cmbRelation1 != ''--如果第一个组合关系不为空
    BEGIN  
	--在第一个查询条件的基础上,加上第二个查询条件
        SET @TempSql=@TempSql+@cmbRelation1+CHAR(32)+@cmbField2 +@cmbOperation2+CHAR(39)+@txtContent2+CHAR(39)  
        if @cmbRelation2!= ''--如果第二个组合关系也不为空
        BEGIN  
		--加上第三个查询条件
        SET @TempSql=@TempSql+@cmbRelation2+CHAR(32)+@cmbField3+@cmbOperation3+CHAR(39)+@txtContent3+CHAR(39)  
        END  
    END  
EXECUTE(@TempSql) 
END</span></span>

 

 

 

4,优点

首先,存储过程可以复用。比如说上面的存储过程,我认为,只要是组合查询的,都可以使用。

其次,方便省事。因为这个存储过程是事先编辑好的,以后需要使用的时候,直接调用。而不需要再重新去写SQL语句。

最后,存储过程还可以防止SQL注入。(个人认为是和参数化查询有关!)

 

二、对比学习

 

1,存储过程对比函数

返回变量:函数返回一个,存储过程可以有多个。

使用范围:函数可以嵌入SQL中,存储过程不行。

针对性:函数强,存储过程较弱。

另外,存储过程一般作为一个独立的整体执行,而函数可以嵌入到SQL中作为一个部分执行。(比如在这之中用到的返回表名的那个方法,就是嵌入到SQL语句中使用)

 

2,存储过程和触发器

首先:触发器是一种特殊的存储过程。

自动化:存储过程需要在使用的时候调用,而触发器在满足条件的时候自动触发。

 

三、总结

总结起来,目前对于存储过程、触发器和函数这三者的区别,就可以用下面的一张表来反应。

 

四、个人感受

其实,好像不管做什么,都是在为了解耦和。然后解耦和的目的是什么呢,是为了适应需求的变化,也就是满足用户!也真的是:用户的需求就是上帝!

然后,把东西放到它该到的地方去,就是最好的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值