スキーマが異なる可能性のある2つの異なるデータベース(同じサーバー上)に2つのテーブルがあります。Table 1
はmaster table
、すべての更新が直接そこに送信されます。Table 2
なる予定mirrored
です:テーブル2をテーブル1と同じようにリアルタイムで維持する必要があります。
欠点は、テーブル2に追加の列、異なる列データ型、追加された主キー、追加された外部キーなどがある可能性があることです。ただし、これらすべてにもかかわらず、テーブル2は、特定のレガシーフロントエンドが生成するすべてのクエリをサポートする必要があります。
私は今日、トリガー内の2番目のデータベースのテーブル2に対して更新、挿入、および削除ステートメントを再実行しようとすることで、これらの「異なる」可能性のあるものをミラーリングできることを計画していました。トリガーが失敗すると、操作全体が失敗するため、理論的にはテーブルを同じに保つ必要があります。
ただし、トリガーをトリガーした実際のSQLステートメントを取得するのに行き詰まっています。
fn_get_sql
DECLARE @Handle varbinary(64)
select @Handle = sql_handle FROM master..sysprocesses WHERE spid = @@SPID
select text FROM ::fn_get_sql(@Handle)
ただし、これはステートメントではなく、トリガーのSQLを返します。
DBCC INPUTBUFFER(@@SPID)
これにより、SQLステートメントの最初の256文字が返されます。十分ではありません。
私の最初の質問は、SQL 2000でトリガーをトリガーするSQLステートメントを取得するにはどうすればよいですか?
私の2番目の質問は:これを行うためのより良い方法はありますか?レプリケーションを使用して、あるテーブルが別のテーブルとは異なるスキーマ(追加の列、列の異なるデータ型など)を持つテーブルをレプリケートできますか?