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’ は更新可能ではありません。
関連したトピックス
- DBMotoレプリケーションに必要なSQL Serverユーザ権限
- 初期同期(リフレッシュ)がより便利に! ステージングリフレッシュ機能
- [ DB2 Connectivity ] 開発キット C# Toolkit で出来ること :プログラミング無しで検証可能
- レプリケーションの設定から処理までの流れ【リアルタイムレプリケーションツールDBMoto】
- DBMotoレプリケーションに必要なMySQLユーザ権限
- DBMotoレプリケーションに必要なPostgreSQLユーザ権限
- DBMotoのレプリケーションパフォーマンスを向上させる方法
- 2つのソーステーブルからターゲットの一つのレコードにレプリケーション
- 3つのレプリケーションモードと対応DB【リアルタイムレプリケーションツールDBMoto】
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方④:レプリケーションスクリプト