2009-04-21 36 views
0

这可能是一个微不足道的问题,但我仍然会问:可以在一个数据库中的三个或四个表中更新触发更新到另一个数据库中的一个或两个表(在MS SQL 2005中?)我很乐意创建任何数量的T-SQL都是必需的,而且我也拥有VS 2008的C#能力,但从未写过类似的触发器。基本上,我有数据存储库的“GetProducts()”调用我的存储过程任何时候任何数据加载与他们需要什么范围,我身体上改变了“缓存”的数据。生活中的一切都很好。如何正确实施MS SQL 2005/2008中的触发器?

现在,他们不希望数据更新作为存储库的一部分。他们认为这是项目的外部因素,应该在没有互动的情况下处理。

任何人有什么建议追求什么?已经在那里的想法链接将是太棒了。

回答

2

当更新,插入或删除一个表时,触发器才会启动。如果您有特定的订单,则必须插入表格,您可以将触发器放在最后一个。

或者,您也可以编写触发器来检查其他表以及确保所有记录都有记录。或者你可以为每个表写一个触发器。或者,如果不需要实时更新,则可以定期运行一项作业以处理所需的更改。不知道你想要做什么,很难说什么是处理你的特定情况的最佳方式。无论你使用触发器做什么,记住触发器对一组数据不是一次一行地操作。应始终写入它们以处理多行插入,更新或删除操作,或者迟早会触发数据完整性问题。不要在游标中这样做,除非您希望在某人需要为新客户端输入3,000,000条新记录时将您的生产表锁定几个小时。

0

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

您的触发器可以更新任意数量的表格,它们也可以导致其他触发器触发,如果您想生活在危险的一面,您甚至可以使它们递归,从而导致原始触发器再次触发。

但是,没有任何东西可以协调我认为你描述的内容。不是说它不能完成。

+0

我在这个项目上工作得更多。基本上,我有三张桌子,一个父母(P)和两个家属,一对多(A和B)。父母和B表使用标识字段作为其键(不重要),但第三个从属表使用UPC作为其主键。所有主键都是包含父表主键(标识)的组合。 当他们CRUD价格或改变upc参与(只在upc上插入或删除)时,我需要更新添加或删除单个产品的单个表。单一由最低的UPC决定。真是一团糟哈哈。我想我至少需要两个触发器。 – 2009-05-07 17:58:13

1

如果这是你想要的东西:

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

你需要使用一个存储过程来封装了所有必要的逻辑和交易在数据库中的原始更新和数据库B所产生的更新

+0

问题是我将如何激发存储过程?更新可能会一次发生,我不会从系统中“加载”事件。我想我可以作弊并每十分钟检查一次,更新任何已更改的数据,并使用附加表格和时间戳记。 – 2009-04-27 02:41:15