sql anywhere触发需要参数

时间:2016-01-30 01:56:49

标签: sqlanywhere

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

但我有2张桌子......例如

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


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

我有一个删除例如红铅笔的程序。 现在我想制作一个能够减少第二张表中铅笔数量的触发器。

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

但现在我不得不说触发了我删除的对象。 我怎么能做到这一点?...或者如果我使用一个删除对象的过程调用的过程,它会更好吗? 谢谢

2 个答案:

答案 0 :(得分:1)

ty @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

答案 1 :(得分:0)

每当使用触发器删除行时,该行中的大多数信息都将存储在名为“已删除”的特殊表中(某些数据类型,如ntext,text和image不是)。但是为了你的目的,这应该有效。

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

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

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