现在的位置: 首页 > 综合 > 正文

触发器VS存储过程 之 一个SQL菜鸟眼中的触发器和存储过程

2013年12月04日 ⁄ 综合 ⁄ 共 1125字 ⁄ 字号 评论关闭

学习SQL SEVER,当讲解到存储过程的时候,偶然之间想起了前面学过的触发器,感觉两者之间有些相通但是绝不相同的地方。对照笔记和查阅相关资料了解了一下两者的区别和联系。

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。触发器是在一个修改了指定表中的数据时执行的存储过程。通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以确保数据的完整性。

触发器的最主要作用是其能够实现保证数据完整性和一致性。它能够对数据库中的相关表进行级联修改,强制比CHECK约束更复杂的数据完整性,并自定义操作消息,维护非规范化数据以及比较数据修改前后的状态。与CHECK约束不同,触发器可以引用其它表中的列。创建多行触发器,当插入,更新、删除多行数据时,必须编写一个处理多行数据的触发器。通过触发器,可以执行级联更新或级联删除这样的动作。级联修改数据库中所有相关表。撤销或者回滚违反引用完整性的操作,防止非法修改数据等。

存储过程Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程可由应用程序通过一个调用来执行,而且充许用户声明变量。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。存储过程虽然既有参数又有返回值但是它与函数不同:存储过程的返回值只是指明执行是否成功,并且它不能像函数那样被直接调用,也就是在调用存储过程时,在存储过程名字前一定要有EXECUTE保留字。

区别和联系

触发器与存储过程非常相似,触发器也是SQL语句集,两者唯一的区别大概就是触发器不能用EXECUTE(执行)语句调用,而是在用户执行Transact-SQL语句时自动触发(激活)执行。存储过程必须有用户、应用程序或者触发器来显示的调用并执行,而触发器是当特定时间出现的时候,自动执行或者激活的,当对某一表进行诸如UPDATEINSERTDELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则,与连接用数据库中的用户、或者应用程序无关。触发器通过事件执行触发而被执行,而存储过程可以通过存储过程名称名字而直接调用。

简而言之,触发器是一种通过特定语句自动触发而不是用EXECUTE执行的存储过程。

抱歉!评论已关闭.