データベースレプリケーション実行中のテーブルの変更 (MS SQL 2008)

データベースレプリケーション実行中のテーブルの変更 (MS SQL 2008)

単一のサブスクライバーに対して「トランザクション パブリケーション」でパブリッシュされているデータベースを使用して、SQL Server 2008 Std を実行しています。

「レプリケーション用にパブリッシュされているため、テーブルを変更できません」というメッセージが表示されずに、パブリッシャーのテーブルに変更を加えることはできません。スキーマの変更 (またはこれを行うために実行されるスクリプト) はサブスクライバーにプッシュされる必要があるため、これは奇妙に思えます。現在、テーブルを変更するには、パブリケーション システム全体をドロップする必要があります。

何が足りないのでしょうか? パブリッシャー テーブルを更新する方法があるはずです。

ありがとう!

答え1

実行しようとしているテーブルの変更は、おそらく SSMS のグラフィカル テーブル デザイナーで行われたものです。グラフィカル デザイナーによるテーブル変更の実装は不十分です。

変更を保存すると、SSMS が実行され、テーブル全体が新しいデザインが組み込まれた新しいテーブルにコピーされ、「古い」テーブルが削除され、新しいテーブルの名前が変更されて置き換えられます。

SQL Server に保存されているテーブルでは列の順序はあまり重要ではないことに注意してください。見た目を良くする以外に、テーブルの「中間」に新しい列を追加する必要はありません :=)

テーブルがトランザクション レプリケーション内にあるため、SSMS はバックグラウンド ドロップ テーブル ステートメントを実行できず、指摘したエラー メッセージが表示されます。

必要な変更(列の追加または削除)を行うには、T-SQLでコマンドを実行する必要があります。

ALTER TABLE dbo.Table ADD NewCol int NULL;
ALTER TABLE dbo.Table DROP COLUMN NewCol;

コマンド構文に一貫性がないことに注意してください (MS に感謝します)。列を追加する場合はキーワード COLUMN を指定する必要はなく、指定することもできませんが、列を削除する場合は指定する必要があります。

レプリケーションがスキーマの変更をレプリケートするように正しく設定されている限り、これらのコマンドは機能し、サブスクライバーに伝播されます。

テーブルの変更は、主キーの変更を除いて、この方法で行うことができます。主キーはトランザクション レプリケーションが機能するために必要であり、変更できません。これらの列を変更する場合は、レプリケーションからアーティクルを削除する必要があります。

お役に立てれば幸いです。

関連情報