我无法理解存储过程和 sql 中的触发器之间的区别。如果有人能好心地向我解释一下,那就太好了。
提前致谢
存储过程是用本地版本的 PL/SQL 编写的用户定义的一段代码,它可以返回一个值(使其成为一个函数),该值通过显式调用来调用。
触发器是一个存储过程,当各种事件发生时(例如更新、插入、删除)会自动运行。
恕我直言,除非绝对需要,否则应避免使用存储过程。
将存储过程想象成面向对象编程语言中的方法。你传入一些参数,它确实工作,它可以返回一些东西。
触发器更像是面向对象编程语言中的事件处理程序。在特定条件下,它可以 (a) 处理事件本身,或 (b) 进行一些处理并允许事件继续冒泡。
关于 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 代码存储过程。
我们可以像这样创建一个存储过程:
CREATE PROCEDURE dbo.Sample_Procedure
@param1 int = 0,
@param2 int
AS
SELECT @param1,@param2
RETURN 0;
当时两者的区别
触发器不能手动调用,存储过程可以手动调用。
触发器在事件发生时自动执行,可用于报告和数据保护,防止从数据库中删除或删除表和数据。我们可以防止触发。另一方面,存储过程必须由某人调用。
可以从前端(客户端应用程序)调用存储过程,但不能从客户端应用程序调用触发器。
触发器和过程之间的一些区别:
在插入、更新或删除之后触发触发器。存储过程是在您调用它时运行的服务器端程序。
存储过程是一组 SQL 语句,编译一次,然后可以执行多次。触发器是在触发事件发生时隐式触发的命名数据库对象。触发动作可以在触发事件之前或之后运行。触发器类似于存储过程,但调用方式不同。触发器不是由用户直接调用的,而存储过程是由用户直接调用的。
可以从另一个存储过程调用存储过程,但不能从触发器调用。存储过程可以在用户需要时执行,但不是触发器。触发器仅在事件发生时触发。存储过程可以有打印语句、多个参数和返回值,但不能有触发器。可以从前端调用存储过程,但不能从触发器调用。
存储过程是驻留在 DBMS 中并由 DBMS 执行的一段代码,可以由客户端或其他存储过程显式调用。它通常是用 SQL 的过程扩展编写的,例如 Oracle 下的 PL/SQL 或 MS SQL Server 下的 T-SQL,但一些 DBMS 也支持更通用的语言,例如 Java 或 .NET。
触发器是一种(某种)存储过程,不能显式调用,而是自动执行以响应插入、更新或删除等事件或表中的行。
触发器是一种特殊的存储过程。它附加到表中,并且仅在发生插入、更新或删除时触发。存储过程是您可以在表中创建和重用的基本函数。
***TRIGGERS***
具体时间行动。
触发器是一种特殊类型的存储过程,用户不直接调用。
如果您熟悉 JavaScript,atrigger
是 anaddEventListener
并且Stored Procedure
是callback
.
两者都是包含可用于实现业务逻辑的代码块的数据库对象
区别在于:
1)Triggers
自动触发,但他们需要事件。(例如:create
, alter
, drop
, insert
, delete
, update
)。
2) 必须显式调用程序然后执行。他们不需要create
, alter
, drop
, insert
, delete
, update
。我们还可以使用 sp_proc 选项自动执行过程。
3)我们不能在内部传递参数triggers
,
示例:如果我们要显示消息“错误”
使用触发器:我们需要一些DDL/DML
使用过程的语句:DDL/DML
需要NO
存储过程和触发器之间的区别
我们可以将触发器定义为数据库对象,就像存储过程一样,或者我们可以说它是一种特殊的存储过程,当数据库中发生事件时触发。我们可以执行一个 SQL 查询,当一个事件被触发时,它将在数据库中“做某事”。
Triggers are fired implicitly while stored procedures are fired explicitly.