.png)
単一のサブスクライバーに対して「トランザクション パブリケーション」でパブリッシュされているデータベースを使用して、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 を指定する必要はなく、指定することもできませんが、列を削除する場合は指定する必要があります。
レプリケーションがスキーマの変更をレプリケートするように正しく設定されている限り、これらのコマンドは機能し、サブスクライバーに伝播されます。
テーブルの変更は、主キーの変更を除いて、この方法で行うことができます。主キーはトランザクション レプリケーションが機能するために必要であり、変更できません。これらの列を変更する場合は、レプリケーションからアーティクルを削除する必要があります。
お役に立てれば幸いです。