sp_repladdcolumn (Transact-SQL)

パブリッシュされた既存のテーブル アーティクルに列を追加します。このテーブルをパブリッシュするすべてのパブリッシャに新しい列を追加することも、テーブルをパブリッシュする特定のパブリケーションに列を追加することもできます。このストアド プロシージャは、パブリッシャ側でパブリケーション データベースについて実行されます。

重要な注意事項重要

このストアド プロシージャは、主に旧バージョンとの互換性のためにサポートされており、使用は推奨されません。Microsoft SQL Server 2000 パブリッシャと SQL Server 2000 の再パブリッシュ サブスクライバでのみ使用してください。SQL Server 2005 または SQL Server 2008 で導入されたデータ型の列に対してこのプロシージャを使用しないでください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_repladdcolumn [ @source_object = ] 'source_object', [ @column = ] 'column' ]
    [ , [ @typetext = ] 'typetext' ]
    [ , [ @publication_to_add = ] 'publication_to_add' ]
    [ , [ @from_agent = ] from_agent ]
    [ , [ @schema_change_script = ] 'schema_change_script' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]

引数

  • [ @source_object = ] 'source_object'
    追加する新しい列が含まれるテーブル アーティクルの名前を指定します。source_object のデータ型は nvarchar(358) で、既定値はありません。

  • [ @column = ] 'column'
    レプリケーション用に追加するテーブルの列の名前を指定します。column のデータ型は sysname で、既定値はありません。

  • [ @typetext = ] 'typetext'
    追加する列の定義を指定します。typetext のデータ型は nvarchar(3000) で、既定値はありません。たとえば、NULL でない 1 文字のフィールドの列 order_filled が追加され、その既定値が N である場合、order_filled が column パラメータの値となり、列の定義 char(1) NOT NULL CONSTRAINT constraint_name DEFAULT 'N' が typetext パラメータの値となります。

  • [ @publication_to_add = ] 'publication_to_add'
    新しい列の追加先となるパブリケーションの名前を指定します。publication_to_add のデータ型は nvarchar(4000) で、既定値は ALL です。ALL の場合、このテーブルが含まれるすべてのパブリケーションに列が追加されます。publication_to_add を指定した場合、指定したパブリケーションにのみ新しい列が追加されます。

  • [ @from_agent = ] from_agent
    ストアド プロシージャがレプリケーション エージェントにより実行されているかどうかを示します。from_agent のデータ型は int で、既定値は 0 です。このストアド プロシージャがレプリケーション エージェントにより実行されている場合は値 1 が、それ以外のすべての場合は既定値 0 が使用されます。

  • [ @schema_change_script = ] 'schema_change_script'
    システム生成カスタム ストアド プロシージャを修正するための SQL Server スクリプトの名前とパスを指定します。schema_change_script のデータ型は nvarchar(4000) で、既定値は NULL です。レプリケーションでは、トランザクション レプリケーションで使用される 1 つ以上の既定のプロシージャを、ユーザー定義カスタム ストアド プロシージャに置き換えることができます。sp_repladdcolumn でレプリケートされたテーブル アーティクルに対してスキーマが変更された場合、その後に schema_change_script を実行して次のいずれかを行えます。

    • カスタム ストアド プロシージャが自動的に再生成される場合、schema_change_script を使用してこれらのカスタム ストアド プロシージャを削除し、新しいスキーマをサポートするユーザー定義カスタム ストアド プロシージャで置き換えることができます。

    • カスタム ストアド プロシージャが自動的に再生成されない場合、schema_change_scriptを使用してこれらのストアド プロシージャを再生成するか、ユーザー定義カスタム ストアド プロシージャを作成できます。

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    スナップショットを無効にする機能を有効または無効にします。force_invalidate_snapshot のデータ型は bit で、既定値は 1 です。

    1 に設定すると、アーティクルへの変更によってスナップショットが無効になることがあります。この場合、値 1 では新しいスナップショットを作成する権限が与えられます。

    0 に設定すると、アーティクルへの変更によってスナップショットが無効になることはありません。

  • [ @force_reinit_subscription = ] force_reinit_subscription
    サブスクリプションを再初期化する機能を有効または無効にします。force_reinit_subscription のデータ型は bit で、既定値は 0 です。

    0 に設定すると、アーティクルへの変更によってサブスクリプションが再初期化されることはありません。

    1 に設定すると、アーティクルへの変更によってサブスクリプションが再初期化されることがあります。この場合、値 1 ではサブスクリプションを再初期化する権限が与えられます。

戻り値

0 (成功) または 1 (失敗)

説明

sp_repladdcolumn は旧バージョンとの互換性を保つために提供されており、使用は推奨されません。レプリケートされるテーブル アーティクルに列を追加する場合は、パブリッシュされるテーブルに対してデータ定義言語 (DDL) コマンドを実行してください。DDL レプリケーションが有効であれば、レプリケーション時にこれらの DDL コマンドは自動的にレプリケートされます。詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。

sp_repladdcolumn は、以前のバージョンの SQL Server 2000 サブスクライバで実行されている再パブリッシュ サブスクライバから DDL 変更を配布する場合に必要になります。

sp_repladdcolumn は、すべての種類のレプリケーションで使用できます。

sp_repladdcolumn を使用するとき、データ変換サービス (DTS) パッケージを使用するパブリケーションに属するアーティクルにスキーマの変更が加えられる場合は、スキーマの変更はサブスクライバに通知されません。また、INSERT/UPDATE/DELETE のカスタム プロシージャがサブスクライバ上で再生成されることもありません。ユーザーは DTS パッケージを手動で再生成し、サブスクライバ側で対応するスキーマの変更を行う必要があります。スキーマの更新が適用されない場合、ディストリビューション エージェントでは以降の変更を適用できない可能性があります。スキーマの変更を行う前には、配信が保留されているトランザクションが存在しないことを確認してください。

typetext に割り当てられている既定値が非決定的な関数 ('datetime not null default getdate()' など) である場合、新しい列を追加した後、収束できなくなる可能性があります。これは、この関数が、列に既定値を読み込むためにサブスクライバ側で実行されるためです。

タイムスタンプ列と計算列は、キャラクタ モードのパブリケーションから除外されます。sp_repladdcolumn を使ってタイムスタンプ列または計算列を追加しても、このようなパブリケーションのサブスクリプションでは新しい列が受け取られません。

重要な注意事項重要

パブリケーション データベースのバックアップは、sp_repladdcolumn を実行した後に実行してください。先にバックアップを実行すると、パブリケーション データベースの復元後にマージが失敗する可能性があります。

権限

sp_repladdcolumn を実行できるのは、sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバだけです。