我知道在这种情况下,我必须使用存储过程,
但我仍然想知道它是否可能?如果不是,为什么?如果是,如何?
答案 0 :(得分:10)
首先想到的是
update yourtable
set yourcolumn = yourcolumn
-- consider a 'where' statement
我想这会调用触发器而不会改变任何东西。因此用代码调用。
答案 1 :(得分:6)
您不能直接调用触发器。在具有触发器的表上执行插入/更新或删除时会自动触发它们。因此,您无法在存储过程中调用触发器。 触发器在执行时需要删除或插入记录,我看不出它是如何传递的......
答案 2 :(得分:3)
根据定义,“触发器”是在更改表时触发的过程。我想你可以通过在具有触发器的表上执行update / delete / create来以编程方式启动它。
如果你想要一个可以手动执行的过程,那么正如你所指出的那样,你应该只创建一个存储过程。
如果你想要一个可以作为触发器手动执行的过程,为什么不创建一个存储过程,然后创建一个只有一行触发该过程的触发器?
如果您正在编写一些测试/诊断代码并且确实需要调用一些触发器代码,那么您可能可以使用一些元API(我记得Oracle有类似的东西。不确定sql server,但它必须有某些东西)提取代码并将其按摩到存储过程中。如果你这样做,就像Alex_L已经提到的那样,你将不得不以某种方式伪造伪更新行,这些行通常只能被触发器访问。