SQL 2008 - 触发器的替代方案

时间:2011-12-06 23:33:17

标签: sql-server-2008 tsql

我正在寻找以下解决方案:

  

数据库:A
  表:InvoiceLines

     

数据库:B
  表:MyLog

每次将行添加到数据库A中的InvoiceLines时,我想运行一个更新数据库B中的表MyLog的查询。我想立即查看。

通常我会在InvoiceLines中的INSERT上的数据库A中创建一个触发器。问题是数据库A属于ERP程序,我根本不想进行任何更改(更新,3层程序中的未知功能等)

有任何提示可以帮助我朝正确的方向发展......?

3 个答案:

答案 0 :(得分:0)

您可以使用事务复制将数据库A中的表中的更改发送到DB B中的副本,然后在副本上创建触发器。它不是“即时的”,但它通常被认为是“接近实时”。

您可能可以使用数据库镜像以某种方式执行此操作,但您必须进行一些测试以确定是否可以使其正常工作(可能在镜像中设置了不存在的触发器)原始?)

答案 1 :(得分:0)

在没有数据库更新的情况下复制触发器功能的一种可能解决方案是通过外部应用程序(即java)轮询表,该应用程序在查找新插入时将触发所需的查询。

在SQLServer2008中,类似的东西可以通过C#程序集完成,但需要再次安装,这需要数据库更新。

答案 2 :(得分:-1)

一个数据库中的触发器可以更新另一个数据库。

只需要限定tablr名称,或者更好地仍然调用存储过程。数据库甚至可以在另一台服务器上,你想要搞乱。

Insert into MyOtherDB..MyLogTable select ... From Inserted 

Exec MyOtherDB..LogInsert(@p1,@p2)
例如

评论后编辑......

根本没有变化......

.net的SQLDependency类将为您提供一种方法,如果您想编写应用程序。

类似但遗憾的是效率低下,就是在数据库上执行一个存储过程的存储过程,该过程会查找A中的变化并做出相应的操作。