我无法理解sql中存储过程和触发器之间的区别。 如果有人能够善意地向我解释这将是伟大的。
提前致谢
答案 0 :(得分:31)
存储过程是用本地版本的PL / SQL编写的用户定义代码段,它可以返回一个值(使其成为函数),通过显式调用它来调用它。
触发器是在各种事件发生时自动运行的存储过程(例如,更新,插入,删除)。
恕我直言存储过程为to be avoided unless absolutely required。
答案 1 :(得分:29)
将存储过程想象成面向对象编程语言中的方法。你传递了一些参数,它确实有效,它可以返回一些东西。
触发器更像是面向对象编程语言中的事件处理程序。在某种情况下,它可以(a)处理事件本身,或者(b)进行一些处理并允许事件继续冒泡。
答案 2 :(得分: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
存储过程只不过是您保存的准备好的SQL代码,因此您可以反复重用代码。因此,如果您考虑一遍又一遍地编写的查询,而不是每次将其保存为存储过程时都必须编写该查询,然后只需调用存储过程来执行您保存为部分的SQL代码存储过程。
我们可以像这样创建一个存储过程:
CREATE PROCEDURE dbo.Sample_Procedure
@param1 int = 0,
@param2 int
AS
SELECT @param1,@param2
RETURN 0;
两者的差异
无法手动调用触发器,可以手动调用存储过程。
触发器在事件发生时自动执行,可用于报告和数据保护,不会从数据库中删除或删除表和数据。我们可以防止触发。另一方面,存储过程必须由某人调用。
可以从前端(客户端应用程序)调用存储过程,但无法从客户端应用程序调用触发器。
答案 3 :(得分:6)
触发器和程序之间存在一些差异:
答案 4 :(得分:4)
插入,更新或删除后触发触发器。存储过程是在您调用它时运行的服务器端程序。
答案 5 :(得分:1)
存储过程是一组一次编译的SQL语句,然后可以执行多次。触发器被命名为数据库对象,在发生触发事件时会隐式触发这些对象。触发动作可以在触发事件之前或之后运行。触发器与存储过程类似,但调用它们的方式不同。用户不直接调用触发器,而用户直接调用存储过程。
答案 6 :(得分:1)
存储过程是驻留在DBMS中并由DBMS执行的一段代码,可以由客户端或其他存储过程显式调用。它通常用SQL的过程扩展编写,例如Oracle下的PL / SQL或MS SQL Server下的T-SQL,但是一些DBMS也支持更多通用语言,如Java或.NET。
触发器是一种(某种)存储过程,无法显式调用,而是自动执行以响应插入,更新或删除等事件或表中的行。
答案 7 :(得分:1)
触发器是一种特殊的存储过程。它附加到表中,仅在发生插入,更新或删除时触发。存储过程是您可以在表中创建和重用的基本功能。
答案 8 :(得分:1)
存储过程可以从另一个存储过程调用,但不能从ab触发器调用。 只要用户需要而不是触发器,就可以执行存储过程。只有在事件发生时才会触发触发器。 存储过程可以具有print语句,多个参数和返回值,但不能具有触发器。 可以从前端调用存储过程但不能触发存储过程。
答案 9 :(得分:1)
***TRIGGERS***
特定时间的行动。
触发器是一种特殊类型的存储过程,不会被用户直接调用。
答案 10 :(得分:0)
两者都是包含可用于实现业务逻辑的代码块的数据库对象
区别在于:
1)Triggers
自动触发,但他们需要事件。
(示例:create
,alter
,drop
,insert
,delete
,update
)。
2)必须明确调用程序然后执行。
它们不需要create
,alter
,drop
,insert
,delete
,update
。
我们也可以使用sp_procoption自动执行程序。
3)我们无法在triggers
,
示例:如果我们要显示消息“错误”
使用触发器:我们需要一些DDL/DML
语句
使用程序:需要DDL/DML
答案 11 :(得分:0)
如果您熟悉JavaScript,则trigger
是addEventListener
,而Stored Procedure
是callback
。
答案 12 :(得分:0)
存储过程和触发器之间的区别
我们可以像存储过程一样将触发器定义为数据库对象,或者可以说它是一种特殊的存储过程,当数据库中发生事件时将触发该触发器。我们可以执行一个SQL查询,当一个事件被触发时,它将在数据库中“做某事”。
Triggers are fired implicitly while stored procedures are fired explicitly.