我已经找到了关于触发器和参数的问题,但没有一个可以解决我的问题...我唯一知道的是,如果触发器需要参数,那就不好了。
但我有2张桌子......例如
color object
====== ======
red pencil
green knife
blue pencil
yellow pencil
red knife
object count
====== =====
pencil 3
knife 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/< - 概述仅供参考。