sql 任何地方触发器需要参数

sql anywhere trigger needs parameter

我已经发现了一些关于触发器和参数的问题,但没有一个能解决我的问题...我唯一知道的是,如果触发器需要参数,那就不好了。

但我有 2 tables...例如

color    object
======   ======
red      pencil
green    knife
blue     pencil
yellow   pencil
red      knife


object      count
======      =====
pencil      3
knife       2

我有一个程序可以删除例如红色铅笔。 现在我想制作一个触发器,将第二个 table 中的铅笔数量减少大约一个。

相应地,如果我删除一把刀,则刀的数量应该减少。

但现在我不得不说触发器我删除了哪个对象。 我该怎么做?...或者如果我改用触发一个由删除对象的过程调用的过程会更好吗? 谢谢

每当您使用触发器删除一行时,该行中的大部分信息都将存储在一个名为 "deleted" 的特殊 table 中(某些数据类型,例如 ntext、text 和图像不是)。但出于您的目的,这应该有效。

Declare @Object nvarchar (50)
Select @Object = [Object] from deleted
Update YourSecondTable set [Count] -= 1 where [Object] = @Object

根据需要进行调整。确保只在删除而不是更新时调用此触发器,因为更新还会将数据复制到已删除的 table.

https://www.mssqltips.com/sqlservertip/2342/understanding-sql-server-inserted-and-deleted-tables-for-dml-triggers/ <-- 总体概述仅供参考。

@SEFL

sql的代码在任何地方都有点不同,但原理是一样的。 这是对我有用的代码:

 ALTER TRIGGER "deleteObject" AFTER DELETE
ORDER 1 ON "DBA"."objects"
REFERENCING OLD AS oldData
FOR EACH ROW
BEGIN
UPDATE summary
    SET count = count - 1
    WHERE object = oldData.object
END

在这里,您使用 REFERENCING OLD AS oldData 访问已删除的行,然后使用 oldData.object