45

我无法理解存储过程和 sql 中的触发器之间的区别。如果有人能好心地向我解释一下,那就太好了。

提前致谢

4

13 回答 13

52

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

触发器是一个存储过程,当各种事件发生时(例如更新、插入、删除)会自动运行。

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

于 2013-05-18T20:10:15.623 回答
36

将存储过程想象成面向对象编程语言中的方法。你传入一些参数,它确实工作,它可以返回一些东西。

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

于 2013-05-18T20:11:57.500 回答
11

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

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

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

CREATE TRIGGER TriggerName
ON [dbo].[TableName]
FOR DELETE, INSERT, UPDATE
AS
BEGIN
    SET NOCOUNT ON
END

存储过程只不过是您保存的准备好的 SQL 代码,因此您可以一遍又一遍地重用代码。因此,如果您考虑一遍又一遍地编写查询,而不是每次都必须编写该查询,您将其保存为存储过程,然后只需调用存储过程来执行您保存为一部分的 SQL 代码存储过程。

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

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

CREATE PROCEDURE dbo.Sample_Procedure 
    @param1 int = 0,
    @param2 int  
AS
    SELECT @param1,@param2 
    RETURN 0;

当时两者的区别

  • 触发器不能手动调用,存储过程可以手动调用。

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

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

于 2016-11-05T14:50:47.450 回答
7

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

  1. 我们可以在 exec 命令的帮助下随时执行存储过程,但触发器只能在定义触发器的表上触发事件(插入、删除和更新)时执行。
  2. 存储过程可以接受输入参数,但我们不能将参数作为输入传递给触发器。
  3. 存储过程可以返回值,但触发器不能返回值。
  4. 我们可以在存储过程中使用事务语句,如开始事务、提交事务和回滚,但不能在触发器中使用事务语句
  5. 我们可以从前端(.asp 文件、.aspx 文件、.ascx 文件等)调用存储过程,但不能从这些文件调用触发器。
于 2016-05-02T08:46:53.613 回答
5

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

于 2013-05-18T20:09:28.337 回答
3

存储过程是一组 SQL 语句,编译一次,然后可以执行多次。触发器是在触发事件发生时隐式触发的命名数据库对象。触发动作可以在触发事件之前或之后运行。触发器类似于存储过程,但调用方式不同。触发器不是由用户直接调用的,而存储过程是由用户直接调用的。

于 2013-05-18T20:12:15.157 回答
1

可以从另一个存储过程调用存储过程,但不能从触发器调用。存储过程可以在用户需要时执行,但不是触发器。触发器仅在事件发生时触发。存储过程可以有打印语句、多个参数和返回值,但不能有触发器。可以从前端调用存储过程,但不能从触发器调用。

于 2013-09-24T13:28:50.747 回答
1

存储过程是驻留在 DBMS 中并由 DBMS 执行的一段代码,可以由客户端或其他存储过程显式调用。它通常是用 SQL 的过程扩展编写的,例如 Oracle 下的 PL/SQL 或 MS SQL Server 下的 T-SQL,但一些 DBMS 也支持更通用的语言,例如 Java 或 .NET。

触发器是一种(某种)存储过程,不能显式调用,而是自动执行以响应插入、更新或删除等事件或表中的行。

于 2013-05-18T20:16:25.300 回答
1

触发器是一种特殊的存储过程。它附加到表中,并且仅在发生插入、更新或删除时触发。存储过程是您可以在表中创建和重用的基本函数。

于 2013-07-19T09:09:50.660 回答
1
                    ***TRIGGERS*** 
  1. 具体时间行动。

  2. 触发器是一种特殊类型的存储过程,用户不直接调用。

  3. 创建触发器时,它被定义为在针对特定表或列进行特定类型的数据修改时触发
于 2014-05-07T16:49:40.510 回答
1

如果您熟悉 JavaScript,atrigger是 anaddEventListener并且Stored Procedurecallback.

于 2018-12-08T07:13:26.597 回答
0

两者都是包含可用于实现业务逻辑的代码块的数据库对象

区别在于:

1)Triggers自动触发,但他们需要事件。(例如:create, alter, drop, insert, delete, update)。

2) 必须显式调用程序然后执行。他们不需要create, alter, drop, insert, delete, update。我们还可以使用 sp_proc 选项自动执行过程。

3)我们不能在内部传递参数triggers

但是我们可以在存储过程中传递参数

示例:如果我们要显示消息“错误”

使用触发器:我们需要一些DDL/DML使用过程的语句:DDL/DML需要NO

于 2014-04-29T12:04:01.480 回答
0

存储过程和触发器之间的区别

我们可以将触发器定义为数据库对象,就像存储过程一样,或者我们可以说它是一种特殊的存储过程,当数据库中发生事件时触发。我们可以执行一个 SQL 查询,当一个事件被触发时,它将在数据库中“做某事”。

    Triggers are fired implicitly while stored procedures are fired explicitly.
于 2019-05-28T07:38:54.720 回答