是否可以通过编程方式调用SQL触发器?

时间:2011-10-16 05:32:45

标签: sql-server tsql

我知道在这种情况下,我必须使用存储过程,

但我仍然想知道它是否可能?如果不是,为什么?如果是,如何?

3 个答案:

答案 0 :(得分:10)

首先想到的是

update yourtable
set yourcolumn = yourcolumn
-- consider a 'where' statement

我想这会调用触发器而不会改变任何东西。因此用代码调用。

答案 1 :(得分:6)

您不能直接调用触发器。在具有触发器的表上执行插入/更新或删除时会自动触发它们。因此,您无法在存储过程中调用触发器。 触发器在执行时需要删除或插入记录,我看不出它是如何传递的......

答案 2 :(得分:3)

根据定义,“触发器”是在更改表时触发的过程。我想你可以通过在具有触发器的表上执行update / delete / create来以编程方式启动它。

如果你想要一个可以手动执行的过程,那么正如你所指出的那样,你应该只创建一个存储过程。

如果你想要一个可以作为触发器手动执行的过程,为什么不创建一个存储过程,然后创建一个只有一行触发该过程的触发器?

如果您正在编写一些测试/诊断代码并且确实需要调用一些触发器代码,那么您可能可以使用一些元API(我记得Oracle有类似的东西。不确定sql server,但它必须有某些东西)提取代码并将其按摩到存储过程中。如果你这样做,就像Alex_L已经提到的那样,你将不得不以某种方式伪造伪更新行,这些行通常只能被触发器访问。