2015-08-19 71 views
-1

我在我的表上触发了一个触发器,它会触发任何行的更新。在sql server中触发器不会被多次触发

我在我的表中有10行。

我正在更新存储过程中某些条件的所有行。

我看到我的触发器只触发了一次。

但我需要为每一行的每次更新运行触发器。

你能帮我解决这个问题吗?

+1

一个触发器执行每个语句,而不是每行,你得到的元表包含受影响的行的'INSERTED'和'DELETED',你不会得到每行执行的触发器。 –

回答

0

在您的触发器中,您有一张表INSERTED,其模式与触发表相同,您可以在其中找到所有插入/更新的10行。你可以这样做批处理。其他方法,你可以迭代这个临时表来做单一的治疗。

+0

但我在触发器中插入和删除了很多表达式和条件。他们有任何其他方式来做到这一点? – user2366302

+0

你是什么意思批处理?我们试图通过使用插入表进行迭代。但是我必须在这里修改大量的逻辑。 – user2366302

+0

您可以用'CURSOR'或循环遍历INSERTED表,并调用存储过程或UDF。我不知道有任何方法可以在一个'UPDATE'中多次调用光标。调用存储过程10次或接收触发10次有什么不同? – stephanejulien

0

当你在这个问题上寻求'帮助'时,我会试着指出你可能更好的方向。你的问题表明你可能缺乏关于SQL的重要知识。为了弥补,你应该阅读:

http://www.codeproject.com/Articles/34142/Understanding-Set-based-and-Procedural-approaches

这是所有程序的方法相比,基于集的方法。看起来对我来说很有帮助。我想强调这个摘录:

的数据库内部执行引擎的设计和采取“一套基于指令”作为输入(SQL),并执行这些指令 以最好的方式优化 (即基于不同而不同在很多 标准)来产生输出。这就是为什么“基于集合的方法”几乎总是更好的选择。

这就是说,我相信它不仅是性能,而且我相信你应该修复你的设计。

或者,仍然有使用游标的情况。你能否更具体一些,并提供更多关于你的情况的信息?