2011-12-06 13 views
1

をトリガする代替:SQL 2008 - 私は、次の解決策を探しています

データベース:
表:InvoiceLines

データベース:B
表:MyLog

データベースAのInvoiceLinesに行が追加されるたびに、データベースBのMyLogテーブルを更新するクエリを実行したいと思います。

通常、InvoiceLinesのINSERTでデータベースAにトリガーを作成します。問題は、データベースAがERPプログラムに属していて、何も変更したくない(更新、3層プログラムの不明な機能など)

正しい方向に手助けするためのヒント。 ..?

+0

あなたがdbソケットをハイジャックしていない限り、私は恐怖のトリガーがあなたの唯一の方法だと思っています。 – Teson

+0

はい、トリガーは、これを行うために提供されるメカニズムです。あなたがそれらを使用したくない場合は、本当にノンクルージーな選択肢を考えることはできません。 –

+0

CCTVカメラの設置が許可されていない家で起こったことをすべて知りたいのと同じです。 –

答えて

-1

あるデータベースのトリガーが別のデータベースをトリガーすることができます。

tablrの名前を修飾するか、ストアドプロシージャを呼び出すことが必要です。データベースは、別のサーバー上にあっても構いません。

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

それとも

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

例えば

コメントの後の編集...

すべてではありませんでし...

.NETのSQLDependencyクラスは、あなたに1つを与えますアプリを書く場合は、

類似しているが悲しいことに非効率的であるのは、Aの変更を探してそれに応じて動作する、データベース上のスケジュールされたストアドプロシージャを実行することでしょう。

+0

はい - わかりました。問題は、データベースAで何もしたくないということです。ここでトリガーを作成することはできません。 –

+0

ああ、何もない。編集する –

0

トランザクションレプリケーションを使用して、データベースAのテーブルからDB Bのコピーに変更を送信し、そのコピーに対してトリガーを作成できます。 「即時」ではありませんが、通常は「ほぼリアルタイム」とみなされます。

これを行うにはDBミラーリングを使用することはできますが、正しく動作するかどうかを確認するためにはいくつかのテストを行う必要があります(ミラー内に存在しないトリガーを設定することもできます

0

データベースの更新なしでトリガーの機能を複製する1つの解決策は、新しい挿入物を見つけると必要なクエリを実行する外部アプリケーション(つまりjava)によってテーブルをポーリングすることです。

SQLServer2008では、C#アセンブリを使用して同様のことを行うことができますが、データベースの更新を必要とするインストールが必要です。

関連する問題