【问题标题】:Trigger vs. stored Procedure触发器与存储过程
【发布时间】:2013-09-12 17:37:14
【问题描述】:

我有一个更新表中的标志的存储过程和一个删除更新行并将其插入新表中的触发器。因此,可以在存储过程中添加触发器的相同功能。所以我只想知道:

哪个更好用:存储过程还是触发器?在什么情况下?换句话说,你能告诉我每一种的优缺点吗?

请注意,我使用的是 SQL Server 2008,并且正在将 VB.NET 连接到我的数据库。

【问题讨论】:

  • 当给定操作发生时执行触发器 - INSERT、UPDATE 或 DELETE。你无法控制它何时发生或发生多少次——它只是发生了。另一方面,存储过程必须由您运行 - 您必须执行它,它不会在每次插入一行时自动运行等等。
  • 如果我的 sp 删除并插入了一条记录......并且我的触发器删除并插入了一条记录,这个 sp 被调用,那么将触发器的代码和 sp 合并到 1 个 SP 中更好还是更好使用单独的 sp 和触发器?
  • 在你的情况下没关系。如果您无法决定,请将所有代码放入 stored procedure 并在需要时使用。所以你会知道你在哪里打电话/打电话给你的sp

标签: sql-server vb.net sql-server-2008 stored-procedures triggers


【解决方案1】:

这完全取决于您的要求,假设您有一个插入触发器并且您的表需要频繁插入。那么它会减慢插入过程。 而 sp 只会在你要发号施令时执行。

两者都是 SQL 对象,因此在执行计划等方面没有区别。

但这又取决于您的要求,如果您希望实时更新表格,则使用触发器,否则如果您可以等待一两个小时以使数据处于一致状态,则使用 SP .

祝你好运

【讨论】:

  • 如果我的 sp 删除并插入了一条记录......并且我的触发器删除并插入了一条记录,这个 sp 被调用,那么将触发器的代码和 sp 合并到 1 个 SP 中更好还是更好使用单独的 sp 和触发器?
  • 它不会以任何方式影响性能,因为我说 SP 和 Trigger 都存储在 DB 中,因此两者的执行计划都存在,如果您从触发器调用 SP 就可以了。但是,如果您打算从图片中删除触发器,那么您肯定可以获得一些性能。
【解决方案2】:

如果发生特殊事件(插入、更新、删除),您的数据库会自动调用触发器。存储过程只是用户编写的数据库函数。该功能可以扩展我们简单分组复杂操作的数据库功能。用户或外部程序负责触发这个额外函数的调用。

触发器可以调用存储过程。

我的建议...如果您想对数据库中的事件进行自动反应,请使用触发器。

使用过程来避免数据库代码中的代码冗余。

【讨论】:

  • 因此,如果我的 sp 删除并插入一条记录...并且我的触发器删除并插入一条记录,则调用此 sp,那么最好将触发器的代码和 sp 合并到 1 个 SP 中还是最好使用单独的 sp 和 trigger?
  • 我会合并它。结果取决于您的应用程序设计。例如,是否有可能第二个程序写入您的数据库,使用触发器更安全。触发器还可以减少您的应用程序代码。缺点是您的程序必须仍然信任触发器工作的数据库,这会使您的程序的行为更加“模糊”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
相关资源
最近更新 更多