アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

レプリケーションしているテーブルに対して、列(フィールド)の追加や
フィールドタイプを変更しようとすると、レプリケーション絡みのエラー
が発生します。

テーブル 'xxxテーブル'
- テーブルを修正できません。
ODBC エラー : [Microsoft][ODBC SQL Server Driver][SQL Server]レプリケー
ションで使用されているので、テーブル 'dbo.xxxテーブル' を 削除 できません。

その都度、当該テーブルを使用しているパブリケーションをいったん削除し、
列の追加やフィールドタイプの変更後、再度パブリケーションを作成して
いる次第です。

パブリケーションを削除せず列を追加したり、フィールドタイプを変更する方法
はございますでしょうか。ご教授願います。

A 回答 (4件)

1) EnterpriseManager - レプリケーション - パブリケーションから対象のパブリケーションのプロパティを開く


「大部分は変更できません」というような内容のメッセージが出てもOKで先に進む
2) 「フィルタ列」で「列をテーブルに追加」をクリック
3) 「レプリケートされたテーブルへの列の追加」画面で列名を指定
 列定義の中身はクリアして、intやvarchar(10)などデータ型のみ指定(NOT NULLは指定しない)
それで確定すれば出来上がりです。
(テスト環境かなにかで試してみてください)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

早速テスト環境にて実施してみたところ、うまく列を追加する
ことができました!ありがとうございます!

もう一つの質問で「レプリケーションしているテーブルに対して
フィールドタイプを変更する方法」の方も教えて頂ければ幸いです。

パブリケーションのプロパティからでは変更出来なさそうでした。。
そもそも、レプリケーションしているテーブルのフィールドタイプは
変更出来ないんですかね?


以上、宜しくお願い致します。

お礼日時:2008/12/02 10:47

うーん、2000ではデータ型変更はできなさそうですね。


ADDとDROPを組み合わせてカラムを作りなおすしかなさそうですが、それならパブリケーションを作りなおした方が楽ですよね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

そもそもレプリケーションしているテーブルの既存のフィールド
タイプを変更するということ自体がめったに無いことですよね。。

後になって変更する必要がある = テーブル仕様が悪かった

ということになるかと思いますので。


色々と教えて頂きありがとうございました。
助かりました。

お礼日時:2008/12/02 12:49

2000だと以下の記載があります。


記載された方法で行なえば可能なのではないでしょうか。

http://technet.microsoft.com/ja-jp/library/aa237 …
> パブリッシュされたテーブルへのスキーマの変更は、
> 必ず、SQL Server Enterprise Manager のレプリケーション
パブリケーション プロパティ ダイアログ ボックス、
>またはレプリケーション ストアド プロシージャを使用して行います。

2005だとAlter文でOKなんですけどね。
http://msdn.microsoft.com/ja-jp/library/ms151870 …

GUIで変更すると以下のような流れで変更するので「元テーブルの削除」でエラーになります。

・ワークテーブル作成
・ワークに元テーブルからデータをインサート
・元テーブル削除
・ワークテーブルを元テーブルの名前にRename
・PK再作成
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

URLのページを確認致しましたが、何分初心者なものでして内容を
理解することができませんでした。。

よかったら具体的に操作方法を教えて頂けると助かります。

例えば・・・
 契約テーブルを特定の名義だけフィルタし、トランザクション
 (プッシュ)にてレプリケーションを行っている環境で、この契約
 テーブルに列を挿入したい。

このような場合、どのようにすればパブリケーションを削除しないで
列を挿入することができるのでしょうか?

お礼日時:2008/12/01 16:28

・SQL Serverのバージョン


・レプリケーションの種類(トランザクション/スナップショット/マージ)
・サブスクリプションの種類(プッシュ/プル)
を記載した方がよいと思います。

特に2000と2005では随分違うと思いますので。

この回答への補足

ご忠告ありがとうございます。

・SQLのバージョン   :SQL Server2000
・レプリケーション種類 :トランザクション及びマージ
・サブスクリプション種類:プッシュ

となります。

以上、宜しくお願い致します。

補足日時:2008/12/01 15:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す