C# 如何在MS SQL 2005/2008中正确实现触发器?

C# 如何在MS SQL 2005/2008中正确实现触发器?,c#,sql,visual-studio-2008,triggers,C#,Sql,Visual Studio 2008,Triggers,这可能是一个无关紧要的问题,但我还是要问:一个数据库中三个或四个表的更新是否会触发另一个数据库中一个或两个表的更新(在MS SQL 2005中?我很乐意创建任意数量的T-SQL,我也有VS2008的C#能力,但从来没有写过这样的触发器 本质上,我让数据存储库的“GetProducts()”在任何数据加载到它们需要的范围时调用我的存储过程,并且我物理上更改了“缓存”数据。生活中的一切都很好 现在,他们根本不希望数据更新成为存储库的一部分。他们觉得这是项目外部的,应该在没有交互的情况下处理 有人对追

这可能是一个无关紧要的问题,但我还是要问:一个数据库中三个或四个表的更新是否会触发另一个数据库中一个或两个表的更新(在MS SQL 2005中?我很乐意创建任意数量的T-SQL,我也有VS2008的C#能力,但从来没有写过这样的触发器

本质上,我让数据存储库的“GetProducts()”在任何数据加载到它们需要的范围时调用我的存储过程,并且我物理上更改了“缓存”数据。生活中的一切都很好

现在,他们根本不希望数据更新成为存储库的一部分。他们觉得这是项目外部的,应该在没有交互的情况下处理


有人对追求什么有什么建议吗?链接到已经存在的想法会非常棒。

你是在问是否更新这三个表,然后触发触发?但是如果只更新三个表中的两个,是否不触发触发器

你的触发器可以更新任意数量的表,它们也可以导致其他触发器触发,如果你喜欢生活在危险的一面,你甚至可以让它们递归,导致原始触发器再次触发


然而,没有任何东西可以证明你所描述的。不是说这不可能

您是否询问是否更新这三个表,然后触发触发器?但是如果只更新三个表中的两个,是否不触发触发器

你的触发器可以更新任意数量的表,它们也可以导致其他触发器触发,如果你喜欢生活在危险的一面,你甚至可以让它们递归,导致原始触发器再次触发


然而,没有任何东西可以证明你所描述的。不是说这不可能

触发器仅在更新、插入或删除一个表时启动。如果您有一个表必须插入的特定顺序,那么可以将触发器放在最后一个表上


或者,您也可以编写触发器来检查其他表,以确保所有表都有记录。或者可以为每个表编写一个触发器。或者,如果不需要实时更新,您可以有一个定期运行的作业来处理所需的更改。由于不知道你到底想做什么,很难说什么是处理你特殊情况的最佳方法。无论您对触发器做什么,请记住触发器操作的是数据集,而不是一次操作一行。它们应该始终被写入以处理多行插入、更新或删除,否则您的触发器迟早会导致数据完整性问题。不要在游标中执行此操作,除非您希望在有人需要为新客户机输入3000000条新记录时将生产表锁定数小时

触发器仅在更新、插入或删除一个表时启动。如果您有一个表必须插入的特定顺序,那么可以将触发器放在最后一个表上


或者,您也可以编写触发器来检查其他表,以确保所有表都有记录。或者可以为每个表编写一个触发器。或者,如果不需要实时更新,您可以有一个定期运行的作业来处理所需的更改。由于不知道你到底想做什么,很难说什么是处理你特殊情况的最佳方法。无论您对触发器做什么,请记住触发器操作的是数据集,而不是一次操作一行。它们应该始终被写入以处理多行插入、更新或删除,否则您的触发器迟早会导致数据完整性问题。不要在游标中执行此操作,除非您希望在有人需要为新客户机输入3000000条新记录时将生产表锁定数小时

如果这是您想要的:

check database A for updates of table1, table2, table3, and or table4    
then update database B table5 and/or table6

您需要使用存储过程来封装数据库a中原始更新的所有必要逻辑和事务,以及数据库B中生成的更新,如果这是您想要的:

check database A for updates of table1, table2, table3, and or table4    
then update database B table5 and/or table6

您需要使用存储过程来封装数据库a中原始更新和数据库B中生成的更新所需的所有逻辑和事务

问题是如何启动存储过程?更新可能一次发生,我不会从系统中获取“加载”事件。我想我可以作弊,让它每10分钟检查一次,更新任何更改的数据,使用额外的表和时间戳。如果它们不是在同一事务中的同一时间发生,你怎么知道“事件”(足够多的表被更改)发生了?将该逻辑添加到保存每个表的过程中,并在“事件”发生时调用一个处理“该做什么”的新过程。问题是如何启动存储过程?更新可能一次发生,我不会从系统中获取“加载”事件。我想我可以作弊,让它每10分钟检查一次,更新任何更改的数据,使用额外的表和时间戳。如果它们不是在同一事务中的同一时间发生,你怎么知道“事件”(足够多的表被更改)发生了?将该逻辑添加到保存每个表的过程中,并调用一个新过程来处理“事件”发生时的“要做什么”。基本上,我有三个表,一个父表(P)和两个从属表,1对多(a和B)。父表和B表使用标识字段作为键(不重要),但第三个从属表使用UPC作为主键。所有主键都是复合的,包含父表主键(标识)。当他们修改价格或更改upc参与(仅在upc上插入或删除)时,我需要更新添加或删除单个产品的单个表。单个由最低UPC确定。真是一团糟。我想我至少需要两个触发器。我在这方面做得更多