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