问题标签 [triggers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2180 浏览

sql - SQL Server 触发器相互触发问题

我有一个审计触发器,它会自动放置更新时间以及在我所有表中的字段中更新的用户。我有另一组触发器,它们将事件信息从更新写入事件表。问题是当有人更新某些东西时,由于第一次触发,事件信息会被触发两次。如何抑制重复条目?

0 投票
4 回答
7375 浏览

sql - 创建 DB2 历史表触发器

我想创建一个历史表来跟踪 DB2 中多个表的字段更改。

我知道历史通常是通过复制整个表的结构并给它一个后缀名来完成的(例如 user --> user_history)。然后,您可以使用一个非常简单的触发器将旧记录复制到 UPDATE 的历史记录表中。

但是,对于我的应用程序,这会占用太多空间。每次字段更改时将整个记录复制到另一个表似乎不是一个好主意(至少对我而言)。所以我想我可以有一个通用的“历史”表来跟踪各个字段的变化:

好的,所以我要跟踪的每个表都有一个自动生成的 id 字段作为主键,它将被放入“record_id”字段中。并且表中的最大 VARCHAR 大小为 1024。显然,如果非 VARCHAR 字段发生更改,则必须在将记录插入历史表之前将其转换为 VARCHAR。

现在,这可能是一种完全迟钝的做事方式(嘿,如果是这样,请告诉我为什么),但我认为这是一种跟踪更改的好方法,这些更改需要很少被拉起并且需要存储一段时间多少时间。

无论如何,我需要帮助编写触发器以在更新时将记录添加到历史表中。让我们以一个假设的用户表为例:

那么,任何人都可以帮助我触发更新用户表以将更改插入历史表吗?我的猜测是需要使用一些过程 SQL 来遍历旧记录中的字段,将它们与新记录中的字段进行比较,如果它们不匹配,则在历史表中添加一个新条目。

如果可能的话,最好对每个表使用相同的触发器操作 SQL,而不管其字段如何。

谢谢!

0 投票
7 回答
138961 浏览

sql-server - 仅当 SQL Server 中满足条件时触发

我希望这对于任何 SQL 人来说都是一个足够简单的问题......

我们有一个保存系统配置数据的表,它通过触发器与历史表相关联,因此我们可以跟踪谁更改了什么以及何时更改。

我需要在此表中添加另一个值,但它会经常从代码中更改,并且要求我们不跟踪它的历史记录(我们不想用成千上万的每天更新。

目前我们的触发器是这样的……

如果属性列值以特定字符串为前缀(例如“NoHist_”),我希望能够添加一些逻辑来阻止它创建记录

鉴于我几乎没有使用触发器的经验,我想知道如何最好地实现它......我尝试了一个 where 子句,如下所示

但它似乎不起作用。该值仍被复制到历史表中。

您可以提供的任何帮助将不胜感激。


好的 - 正如 Cade Roux 所预测的那样,这在多次更新时都失败了。我将不得不采取一种新的方法来解决这个问题。请问有人有其他建议吗?


伙计们 - 请在这里教育我......为什么在这种情况下 LEFT() 比 LIKE 更可取?我知道我已经接受了答案,但我想知道我自己的教育。

0 投票
4 回答
3046 浏览

sql - MS SQL 触发器更新调用死锁?

我有两张桌子。俱乐部和教练。它们之间是 0,1 - 0,1 关系(教练可以有零个或一个俱乐部。俱乐部可以有零个或一个教练)。当我想更换给定俱乐部的教练时,我必须更新俱乐部表。所以我必须改变那个俱乐部的idCoach。让我们考虑一个新教练(给定俱乐部的新指定教练)已经是其他俱乐部的教练。我必须将那个俱乐部的 idCoach 字段设置为 Null,因为他的教练将被分配到另一个俱乐部。此外,如果我想更换教练的俱乐部已经有教练,那么我必须将该教练的 idClub (在教练表中)设置为 Null。

以上所有内容,也适用于我想更换某个教练的俱乐部时。(必须将给定教练的前一家具乐部的 idCoach 字段设置为空,并且必须将新俱乐部的 idCoach 设置为空)。

当我在 Club 或 Coach 表中插入新记录或删除现有记录时,可能会出现同样的问题(在插入、更新和删除中,我必须注意相应的引用并取消它们的链接)。

我想用触发器解决这个问题。我想我必须在 Club 表中有 3 个触发器(用于插入、更新和删除),在 Coach 表中还有 3 个触发器。

在更新触发器中(例如在俱乐部中)我必须更新教练表,这将再次触发俱乐部中的更新(因为在它的主体中它必须更新俱乐部表)并且该触发器将更新教练和触发器等等。所以我会有一个死锁。

如何解决这个问题?

这是我第一次使用触发器,非常抱歉,对于一个简单的事情的这个大解释。

干杯!

0 投票
2 回答
11225 浏览

sql - SQL 动作关键字

SQL Action 关键字有什么作用?我可以在触发器中使用此关键字并确定触发器是否由插入、删除或更新调用?

0 投票
3 回答
39937 浏览

postgresql - 调试 postgresql 触发器

我在 Postgresql 中有这个触发器,我不能只是开始工作(什么都不做)。为了理解,我是这样定义的:

现在让它更有趣一点。你如何调试触发器?

0 投票
1 回答
280 浏览

sql-server - SQL 2005 触发问题

我可以确定导致触发器从触发器中触发的存储过程的名称吗?

0 投票
1 回答
4233 浏览

wpf - WPF:向按钮添加触发器

我目前正在编写一个带有 WPF UI 的程序,并且我有一个关闭或取消的按钮,具体取决于页面上是否有任何更改。为了实现这一点,我想在按钮上使用触发器(以样式包装),以便当依赖属性 HasChanges 为 true 时,按钮将从“关闭”变为“取消”。到目前为止,我的程序将“关闭”显示为按钮的文本,但是当我的依赖属性 HasChanges 变为 true 时没有任何反应。WPF 页面是用 VB.Net 而不是 XAML 编写的。

到目前为止,我有:

任何帮助是极大的赞赏。

0 投票
9 回答
33193 浏览

oracle - 不使用触发器在 Oracle 中自动递增

除了使用触发器之外,在 oracle 中实现自动增量的其他方法是什么?

0 投票
8 回答
36668 浏览

sql - 如何识别与 sybase 数据库中的表关联的触发器?

我正在使用 SQL Advantage 并且需要知道 SQL 是什么来识别与表关联的触发器。我没有使用其他工具的选项,所以老式的 SQL 解决方案是理想的答案。