SQL存储过程和触发器之间的差异

Dyn*_*ite 36 sql triggers stored-procedures

我无法理解sql中存储过程和触发器之间的区别.如果有人能够善意向我解释这将是伟大的.

提前致谢

Boh*_*ian 44

存储过程是用户定义的一段代码,用PL/SQL的本地版本编写,它可以返回一个值(使其成为一个函数),通过显式调用它来调用它.

触发器是在各种事件发生时自动运行的存储过程(例如,更新,插入,删除).

除非绝对需要,否则应避免使用恕我直言存储过程.

  • ***为什么你会建议不惜一切代价避免存储过程?在我看来,存储过程看起来像是一个相当没有根据且过于宽泛的陈述**确实有**有效且非常合法的用例! (10认同)
  • 我宁愿说尽可能避免**触发**,因为它们(a)不能很好地扩展,(b)你无法控制它们是否以及何时以及经常发射,以及(c)它们的功能经常被开发者和支持者"隐藏"和遗忘,使他们成为无尽的麻烦和令人讨厌的惊喜...... (6认同)

小智 33

可以将存储过程看作面向对象编程语言中的方法.你传递一些参数,它确实有效,它可以返回一些东西.

触发器更像是面向对象编程语言中的事件处理程序.在某种情况下,它可以(a)处理事件本身,或(b)进行一些处理并允许事件继续冒泡.


小智 7

关于SQL Server中的触发器:触发器是一段特殊的代码,在数据库服务器中发生事件时自动执行.

当用户尝试通过数据操纵语言(DML)事件修改数据时,DML触发器执行.DML事件是表或视图上的INSERT,UPDATE或DELETE语句.无论是否有任何表行受到影响,触发任何有效事件时都会触发这些触发器

我们可以像这样创建触发器:

CREATE TRIGGER TriggerName
ON [dbo].[TableName]
FOR DELETE, INSERT, UPDATE
AS
BEGIN
    SET NOCOUNT ON
END
Run Code Online (Sandbox Code Playgroud)

一个存储过程无非是,你保存,所以你可以一遍又一遍地重复使用代码编写的SQL代码更.因此,如果您考虑一遍又一遍地编写的查询,而不是每次将其保存为存储过程时都必须编写该查询,然后只需调用存储过程来执行您保存为部分的SQL代码存储过程.

  • 我们可以在存储过程中执行大量编程工作并一次又一次地执行.
  • 我们可以创建接受输入过程并给出输出的过程
  • 我们可以通过try catch来处理错误
  • 存储过程可以嵌套并使用嵌套调用一次又一次地调用
  • 它更安全

我们可以像这样创建一个存储过程:

CREATE PROCEDURE dbo.Sample_Procedure 
    @param1 int = 0,
    @param2 int  
AS
    SELECT @param1,@param2 
    RETURN 0;
Run Code Online (Sandbox Code Playgroud)

两者的差异

  • 无法手动调用触发器,可以手动调用存储过程.

  • 事件发生时触发器自动执行,可用于报告和数据保护,不会删除或删除数据库中的表和数据.我们可以防止触发.另一方面,存储过程必须由某人调用.

  • 可以从前端(客户端应用程序)调用存储过程,但不能从客户端应用程序调用触发器.


小智 6

触发器和程序之间的一些区别:

  1. 我们可以在exec命令的帮助下随时执行存储过程,但只有在定义了触发器的表上触发事件(插入,删除和更新)时才能执行触发器.
  2. 存储过程可以接受输入参数,但我们不能将参数作为输入传递给触发器.
  3. 存储过程可以返回值,但触发器不能返回值.
  4. 我们可以在存储过程中使用诸如begin transaction,commit transaction和rollback之类的事务语句,但是我们不能在触发器中使用事务语句
  5. 我们可以从前端调用存储过程(.asp文件,.aspx文件,.ascx文件等),但我们无法从这些文件中调用触发器.


Tim*_*Tim 5

触发器在插入、更新或删除后触发。存储过程是一个服务器端程序,在您调用它时运行。