2010-01-26 60 views
1

我如何获得自动操作的类型(类似于由触发器完成的),而不是使用存储过程,或者任何其他方式,因为我需要当我(插入或更新或删除)在tableA的记录,或tableB的我需要 做表C进行同样的操作,另一种方式,而不是触发

我不想使用触发器,因为一些缺点,如:

  • 这是很容易查看表关系,约束,索引,数据库中的存储过程,但触发器很难查看。
  • 触发器对客户端应用程序应用程序执行不可见。它们不可见或可以在调试代码中进行追踪。
  • 很难遵循它们的逻辑,因为它可以在数据库插入/更新发生之前或之后被触发。
  • 很容易忘记触发器,如果​​没有文档,将很难找出新开发人员的存在。
  • 触发器每次更新数据库字段时都会运行,并且系统开销较大。它使系统运行更慢

所以,我只是想...是否有可能得到与触发类似的结果? 谢谢

回答

0

如果你确保所有插入tableA或tableB的代码都通过一个单一的通用代码路径,那么你可以同时插入到tableC中。

例如,您可以实现一个存储过程,所有内容都必须调用才能将一条记录插入到tableA中 - 作为此sproc的一部分,您只需包含该操作即可插入到tableC中。

这需要所有的代码都经过这个共同点。如果没有,那么无论何时在tableA中完成插入操作时都必须确保无处不在,它会将其重复放入tableC中。这可以是更多的工作。

这就是为什么触发器很方便,因为它使它自动化。而你不必须确保所有代码路径做相应的调用(这可以在现有/遗留代码库非常棘手)

4

不能直接回答你的问题,但解决一些你所提到的事情:

很容易查看表格关系 ,约束,索引,存储 程序在数据库中,但触发器 难以查看。

触发器和存储过程一样容易查看。

触发器对 客户端应用程序应用程序执行不可见。他们 不可见或可以在 调试代码中追踪。

是的。但在很多情况下,进入存储过程也不是微不足道的。

很难按照他们的逻辑,因为它 他们之前或之后 数据库插入/更新发生被解雇。

不真实的。触发器在它们被定义为在触发之前触发,在触发前或触发之前。

这是很容易有关触发器 忘记,如果没有文件它 将很难找出为他们的生存 新的开发。

不真实的,如果你正在使用的版本控制。

触发器每次运行时 数据库字段更新,这是 头顶上的系统。它使得系统 运行速度较慢

写得不好的触发器与写入不良的代码一样可能执行得不好。 (但我不主张他们的过度使用。例如,如果一个动作都能得到满意的约束,使用它在触发。)

所以所有的说,触发仍然是一个不错的选择。如果您确实必须在应用程序层中执行此操作,请在此处执行此操作。

+0

谢谢您指出,开发人员在处理触发器方面的无能并不是避免它们的正当理由。 – HLGEM 2010-01-26 21:12:46

0

你需要从用户的AB撤销DML权限,只授予权限执行存储过程这将处理插入到C

0

感谢所有的及时答复,,,

据我所知,使用触发器是一个不错的选择一些点,但我在想,要是:

我要创造(插入/更新功能/删除),并且可以从任何存储过程(将插入/更新/删除)调用该函数tableA和tableB。这将允许我管理一个函数,如果需要更改而不是修改每个存储过程中的代码。另外,我可以在每个存储过程中使用事务来保持所有表中的数据一致。

+0

什么保证没有人会直接通过脚本进行更改并使用sps或函数?假设你必须改变一百万个reciords,你不会一次循环一个记录吗?不,当然不。触发器是最好的解决方案。 – HLGEM 2010-01-26 21:12:06

相关问题