我正在寻找编写一个符合 ANSI 的 SQL 触发器,并且相信我已经完成了 90% 的工作,但缺少一些内容。我也对其性能有一些疑问/担忧(作为 SQL 语句和触发器)。
我有一张桌子叫widgets
:
widgets
widget_id | widget_name | widget_type_id | widget_is_fizz
========================================================================
1 Apple 1 0
2 Kiwi 2 0
3 Pear 3 1
... ... ... ...
2634 Banana 28 0
我需要触发器在此表上发生 INSERT 或 UPDATE 时触发:
- 对于
widget_type_id
17 和widget_is_fizz
1(真)的 INSERT;或者 - 对于更新(出于与上述相同的原因)
当在此表上插入或更新类型 ID 为 17 的“fizz 小部件”时,我想将其更改widget_name
为“未知”。
到目前为止,我最好的尝试:
CREATE TRIGGER widget_name_trigger
ON
widgets
FOR
INSERT
AS
UPDATE
widgets
SET
widget_name = 'UNKNOWN'
WHERE
widget_type_id = 17
AND
widget_is_fizz = 1
仍然无法弄清楚如何让它对 UPDATE 执行与对 INSERT 相同的操作。也不确定它是否在语法上正确且符合 ANSI。
此外,在性能方面,有传言说我们的 DBA 讨厌触发器,当我在他面前进行代码审查时,可能会与之抗争。触发器本身就很昂贵吗?如果是这样,为什么,我可以在这里做些什么来减轻这种缓慢?提前致谢。