SQL Serverのビューをレプリケーションする場合の注意点【リアルタイムレプリケーションツールDBMoto】


SQL Serverのビューを使用すると、特定のユーザに対して必要なデータだけを提供したり、複数テーブルからの参照を容易にするなど、非常に便利なものです。
ただし、ビューは参照(select)には向いていますが、登録・更新・削除(insert, update, delete)を行う場合は制限があります。

DBMotoでは登録・更新・削除によりレプリケーションを行うため、ビューの制限をクリアしていないとレプリケーションすることができません。

具体的にはベースの参照テーブルが1つの場合で単純にデータをselectするだけのビューであればリフレッシュに限りレプリケーションが可能です。


※図1:参照するテーブルが1つの場合の例。画面はSQL Server Management Studioでのビュー作成画面

しかし、ベースの参照テーブルが複数ある場合や、集計関数や計算を行うようなビューの場合はビューの仕様で更新等が行えません。


※図2:参照するテーブルが2つの場合の例。画面はSQL Server Management Studioでのビュー作成画面

このようなケースでDBMotoでレプリケーションを行おうとすると、以下のようなエラーメッセージがSQL Server側から返されます。

System.Data.SqlClient.SqlException: 変更が複数のベース テーブルに影響するので、ビューまたは関数 ‘xxxxx’ は更新可能ではありません。

 

関連したトピックス