存储过程和触发器的区别
看了社区里有相关的帖子,但是基本上都是概念间的比较.主要想问一下,有没有什么情况下必须只能使用存储过程而不能使用触发器(或者反之),又或者在2个都能使用的情况下,效率和占用资源有没有什么区别?请高手帮忙释疑下,谢谢了
------解决方案--------------------下面是存储过程和用户自定义函数的   
 存储过程: 
 存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。 
 存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。  
 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:  
 1、可以在单个存储过程中执行一系列 SQL 语句。 
 2、可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。 
 3、存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。   
 用户定义函数: 
 Microsoft SQL Server 2000 允许创建用户定义函数。与任何函数一样,用户定义函数是可返回值的例程。根据所返回值的类型,每个用户定义函数可分成以下三个类别:  
 1、返回可更新数据表的函数  
 如果用户定义函数包含单个 SELECT 语句且该语句可更新,则该函数返回的表格格式结果也可以更新。 
 2、返回不可更新数据表的函数  
 如果用户定义函数包含不止一个 SELECT 语句,或包含一个不可更新的 SELECT 语句,则该函数返回的表格格式结果也不可更新。 
 3、返回标量值的函数  
 用户定义函数可以返回标量值。   
 视图: 
 视图只是保存在数据库中的 SELECT 查询。因此,可对查询执行的大多数操作也可在视图上执行。
------解决方案--------------------存储过程要另外调用 
 触发器做增删改时自动执行。   
 和增删改无关的动作不可能用触发器实现吧 
 由 增删改 发起的动作, 用触发器可能更方便些   
 因为你可以使用 inserted 和 deleted 表 
 如果触发器和存储过程语句一样,在执行中没有区别,区别只是你的调用和系统自动调用。     
------解决方案--------------------通俗来讲,存储过程是要人干涉的,也就是说你如果不调用它,它就不会执行,而触发器,是不 
 需要人为干涉的,当达到什么条件下,它会自动执行。   
 有没有什么情况下必须只能使用存储过程而不能使用触发器 
 ---------------- 
 当然有,这要从它们的功能说起,如果你要写报表,存储过程最好了.如是当作约束时,只能用触发器了。 
 比如说,向一个表插入一条新数据,不能插入有相同记录,这时用触发器.   
 或者在2个都能使用的情况下,效率和占用资源有没有什么区别?   
 ---------------- 
 就我个人理解触发器效率和占用资源都要比存储过程要好,原因很简单,存储过程里放的是大量的sql语句 
 需要编译,执行时间也要比触发器要长.   
 LS的继续,请指正     
------解决方案--------------------有没有什么情况下必须只能使用存储过程而不能使用触发器(或者反之) 
 ----------------------------   
 触发器也是存储过程,用哪个看你具体的需要了 
 触发器的效率个人理解更高些