sp_changearticle (Transact-SQL)

トランザクション レプリケーションまたはスナップショット レプリケーションのアーティクルのプロパティを変更します。このストアド プロシージャは、パブリッシャ側でパブリケーション データベースについて実行されます。

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

構文

sp_changearticle [ [@publication= ] 'publication' ]
    [ , [ @article= ] 'article' ]
    [ , [ @property= ] 'property' ]
    [ , [ @value= ] 'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] 'publisher' ]

引数

  • [ @publication=] 'publication'
    アーティクルを含むパブリケーションの名前を指定します。publication のデータ型は sysname で、既定値は NULL です。

  • [ @article = ] 'article'
    プロパティを変更するアーティクルの名前を指定します。article のデータ型は sysname で、既定値は NULL です。

  • [ @property=] 'property'
    変更するアーティクルのプロパティを指定します。property のデータ型は nvarchar(100) です。

  • [ @value=] 'value'
    アーティクル プロパティの新しい値を指定します。value のデータ型は nvarchar(255) です。

    次の表に、アーティクルのプロパティと、それぞれの値を示します。

    プロパティ

    説明

    creation_script

     

    ターゲット テーブルを作成するのに使用されるアーティクル スキーマ スクリプトのパスと名前です。既定値は NULL です。

    del_cmd

     

    実行する DELETE ステートメントです。指定しないと、ログから作成されます。

    description

     

    アーティクルの新しい説明エントリです。

    dest_object

     

    これは旧バージョンとの互換性のために用意されています。dest_table を使用します。

    dest_table

     

    新しいレプリケーション先テーブルです。

    destination_owner

     

    目的のオブジェクトの所有者名です。

    filter

     

    テーブルをフィルタによって選択 (行方向のフィルタ選択) するために使用される新しいストアド プロシージャです。既定値は NULL です。ピア ツー ピア レプリケーションのパブリケーションに対しては変更できません。

    fire_triggers_on_snapshot

    true

    初期スナップショットが適用されたときに、レプリケートされたユーザー トリガが実行されます。

    注意
    トリガをレプリケートするには、schema_option のビットマスク値に値 0x100 を含める必要があります。

     

    false

    初期スナップショットが適用されたときに、レプリケートされたユーザー トリガが実行されません。

    identity_range

     

    サブスクライバで割り当てられた、割り当て済みの ID 範囲のサイズを管理します。ピア ツー ピア レプリケーションではサポートされません。

    ins_cmd

     

    実行する INSERT ステートメントです。指定しないと、ログから作成されます。

    pre_creation_cmd

    同期が適用される前に、レプリケーション先のテーブルを削除したり、切り捨てたりできる作成準備コマンドです。

     

    none

    コマンドを使用しません。

     

    drop

    レプリケーション先テーブルを破棄します。

     

    delete

    レプリケーション先テーブルを削除します。

     

    truncate

    レプリケーション先テーブルを切り捨てます。

    pub_identity_range

     

    サブスクライバで割り当てられた、割り当て済みの ID 範囲のサイズを管理します。ピア ツー ピア レプリケーションではサポートされません。

    schema_option

    指定されたアーティクルに対するスキーマ生成オプションのビットマップを指定します。schema_option のデータ型は binary(8) です。詳細については、後の「解説」を参照してください。

     

    0x00

    スナップショット エージェントによるスクリプト作成を無効にします。

     

    0x01

    オブジェクト作成 (CREATE TABLE、CREATE PROCEDURE など) を生成します。

     

    0x02

    定義されている場合、アーティクルの変更を反映するストアド プロシージャを生成します。

     

    0x04

    ID 列のスクリプトが IDENTITY プロパティを使用して作成されます。

     

    0x08

    timestamp 列をレプリケートします。このオプションが設定されていない場合、timestamp 列は binary としてレプリケートされます。

     

    0x10

    対応するクラスタ化インデックスを生成します。

     

    0x20

    サブスクライバでユーザー定義データ型 (UDT) を基本データ型に変換します。UDT 列に CHECK 制約または DEFAULT 制約があるときに、UDT 列が主キーの一部になっている場合、または計算列で UDT 列が参照されている場合、このオプションは使用できません。Oracle パブリッシャの場合はサポートされません。

     

    0x40

    対応する非クラスタ化インデックスを生成します。

     

    0x80

    宣言された参照整合性を主キーに含めます。

     

    0x100

    定義されている場合、テーブル アーティクル上のユーザー トリガをレプリケートします。

     

    0x200

    FOREIGN KEY 制約をレプリケートします。参照するテーブルがパブリケーションの一部でない場合は、パブリッシュされたテーブルのすべての FOREIGN KEY 制約がレプリケートされるわけではありません。

     

    0x400

    CHECK 制約をレプリケートします。

     

    0x800

    既定値をレプリケートします。

     

    0x1000

    列レベルの照合順序をレプリケートします。

     

    0x2000

    パブリッシュされたアーティクルのソース オブジェクトに関連付けられた拡張プロパティをレプリケートします。

     

    0x4000

    テーブル アーティクル上で定義されていれば、一意キーをレプリケートします。

     

    0x8000

    ALTER TABLE ステートメントを使用して、テーブル アーティクル上の主キーと一意キーを制約としてレプリケートします。

    注意
    このオプションは推奨されません。代わりに、0x80 および 0x4000 を使用してください。

     

    0x10000

    CHECK 制約を NOT FOR REPLICATION としてレプリケートして、この制約が同期中に適用されないようにします。

     

    0x20000

    FOREIGN KEY 制約を NOT FOR REPLICATION としてレプリケートして、この制約が同期中に適用されないようにします。

     

    0x40000

    パーティション テーブルまたはインデックスに関連付けられているファイル グループをレプリケートします。

     

    0x80000

    パーティション テーブルのパーティション構成をレプリケートします。

     

    0x100000

    パーティション インデックスのパーティション構成をレプリケートします。

     

    0x200000

    テーブルの統計をレプリケートします。

     

    0x400000

    既定のバインドです。

     

    0x800000

    ルールのバインドです。

     

    0x1000000

    フルテキスト インデックスです。

     

    0x2000000

    xml 列にバインドされた XML スキーマ コレクションはレプリケートされません。

     

    0x4000000

    xml 列のインデックスをレプリケートします。

     

    0x8000000

    サブスクライバにまだ存在しないスキーマを作成します。

     

    0x10000000

    サブスクライバ上で xml 列を ntext に変換します。

     

    0x20000000

    SQL Server 2005 で導入されたラージ オブジェクト データ型 (nvarchar(max)、varchar(max)、および varbinary(max)) を、SQL Server 2000 でサポートされているデータ型に変換します。これらの型をマップする方法の詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」の「以前のバージョンに対する新しいデータ型のマッピング」を参照してください。

     

    0x40000000

    権限をレプリケートします。

     

    0x80000000

    パブリケーションの一部ではない任意のオブジェクトに対する依存関係の削除を試行します。

    0x100000000

    このオプションを使用すると、varbinary(max) 列に対して FILESTREAM 属性が指定されている場合にこの属性をレプリケートできます。テーブルを SQL Server 2005 サブスクライバにレプリケートする場合は、このオプションを指定しないでください。このスキーマ オプションがどのように設定されているかに関係なく、FILESTREAM 列を含むテーブルを SQL Server 2000 サブスクライバにレプリケートすることはサポートされていません。

    関連オプション 0x800000000 を参照してください。

    0x200000000

    SQL Server 2008 で導入された日付および時刻データ型 (date、time、datetimeoffset、および datetime2) を、以前のバージョンの SQL Server でサポートされているデータ型に変換します。これらの型をマップする方法の詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」の「以前のバージョンに対する新しいデータ型のマッピング」を参照してください。

    0x400000000

    データとインデックスの圧縮オプションをレプリケートします。詳細については、「圧縮されたテーブルおよびインデックスの作成」を参照してください。

    0x800000000

    このオプションを設定すると、サブスクライバの独自のファイル グループに FILESTREAM データを格納できます。このオプションが設定されていない場合、FILESTREAM データは既定のファイル グループに格納されます。レプリケーションではファイル グループは作成されないので、このオプションを設定する場合は、サブスクライバでスナップショットを適用する前にファイル グループを作成しておく必要があります。スナップショットを適用する前にオブジェクトを作成する方法の詳細については、「スナップショット適用前および適用後のスクリプトの実行」を参照してください。

    関連オプション 0x100000000 を参照してください。

    0x1000000000

    SQL Server 2005 を実行しているサブスクライバに UDT 型の列をレプリケートできるように、8,000 バイトを超える共通言語ランタイム (CLR) ユーザー定義型 (UDT) を varbinary(max) に変換します。

    0x2000000000

    SQL Server 2005 を実行しているサブスクライバに hierarchyid 型の列をレプリケートできるように、hierarchyid データ型を varbinary(max) に変換します。レプリケートされたテーブルで hierarchyid 列を使用する方法の詳細については、「hierarchyid (Transact-SQL)」を参照してください。

    0x4000000000

    テーブルのフィルタ選択されたインデックスをレプリケートします。フィルタ選択されたインデックスの詳細については、「フィルター選択されたインデックスのデザイン ガイドライン」を参照してください。

     

    0x8000000000

    SQL Server 2005 を実行しているサブスクライバに geography 型および geometry 型の列をレプリケートできるように、これらのデータ型を varbinary(max) に変換します。

     

    0x10000000000

    geography 型と geometry 型の列のインデックスをレプリケートします。

    0x20000000000

    列の SPARSE 属性をレプリケートします。この属性の詳細については、「スパース列の使用」を参照してください。

    status

    プロパティの新しいステータスを指定します。

     

    dts horizontal partitions

    単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

     

    include column names

    列名が、レプリケートされる INSERT ステートメントに含まれます。

     

    no column names

    列名は、レプリケートされる INSERT ステートメントに含まれません。

     

    no dts horizontal partitions

    アーティクルの行方向のパーティション分割は、変換可能なサブスクリプションによって定義されません。

     

    none

    sysarticles テーブル内のすべての状態オプションをクリアし、アーティクルを非アクティブとしてマークします。

     

    parameters

    パラメータ化コマンドを使用して、変更がサブスクライバに反映されます。これは新しいアーティクルに対する既定値です。

     

    string literals

    文字列リテラル値を使用して、変更がサブスクライバに反映されます。

    sync_object

     

    同期出力ファイルを作成するのに使用されるテーブルまたはビューの名前です。既定値は NULL です。Oracle パブリッシャの場合はサポートされません。

    tablespace

    Oracle データベースからパブリッシュされたアーティクルのログ テーブルによって使用されたテーブルスペースを識別します。詳細については、「Oracle テーブルスペースの管理」を参照してください。

    threshold

     

    ディストリビューション エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージの値です。ピア ツー ピア レプリケーションではサポートされません。

    type

     

    Oracle パブリッシャの場合はサポートされません。

     

    logbased

    ログベースのアーティクルです。

     

    logbased manualboth

    手動フィルタと手動ビューを使用する、ログベースのアーティクルです。このオプションを指定する場合は、sync_object プロパティと filter プロパティも設定する必要があります。Oracle パブリッシャの場合はサポートされません。

     

    logbased manualfilter

    手動フィルタを使用する、ログベースのアーティクルです。このオプションを指定する場合は、sync_object プロパティと filter プロパティも設定する必要があります。Oracle パブリッシャの場合はサポートされません。

     

    logbased manualview

    手動ビューを使用する、ログベースのアーティクルです。このオプションを指定する場合は、sync_object プロパティも設定する必要があります。Oracle パブリッシャの場合はサポートされません。

     

    indexed viewlogbased

    ログベースのインデックス付きビュー アーティクルです。Oracle パブリッシャの場合はサポートされません。この種類のアーティクルに対しては、ベース テーブルを個別にパブリッシュする必要はありません。

     

    indexed viewlogbased manualboth

    手動フィルタと手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。このオプションを指定する場合は、sync_object プロパティと filter プロパティも設定する必要があります。この種類のアーティクルに対しては、ベース テーブルを個別にパブリッシュする必要はありません。Oracle パブリッシャの場合はサポートされません。

     

    indexed viewlogbased manualfilter

    手動フィルタを使用する、ログベースのインデックス付きビュー アーティクルです。このオプションを指定する場合は、sync_object プロパティと filter プロパティも設定する必要があります。この種類のアーティクルに対しては、ベース テーブルを個別にパブリッシュする必要はありません。Oracle パブリッシャの場合はサポートされません。

     

    indexed viewlogbased manualview

    手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。このオプションを指定する場合は、sync_object プロパティも設定する必要があります。この種類のアーティクルに対しては、ベース テーブルを個別にパブリッシュする必要はありません。Oracle パブリッシャの場合はサポートされません。

    upd_cmd

     

    実行する UPDATE ステートメントです。指定しないと、ログから作成されます。

    NULL

    NULL

    変更することができるアーティクルのプロパティの一覧を返します。

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    このストアド プロシージャが実行する操作によって既存のスナップショットが無効になることを許可します。force_invalidate_snapshot のデータ型は bit で、既定値は 0 です。

    0 に設定すると、アーティクルへの変更によってスナップショットが無効になることはありません。変更に新しいスナップショットが必要であることをストアド プロシージャが検出すると、エラーが発生し、変更は行われません。

    1 に設定すると、アーティクルの変更によってスナップショットが無効になることがあります。また、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットに古いスナップショットのマークを付けて、新しいスナップショットを生成することができます。

    変更によって新しいスナップショットの生成が必要になるプロパティについては、「解説」を参照してください。

  • [ **@force_reinit_subscription=]**force_reinit_subscription
    このストアド プロシージャが実行する操作によって、既存のサブスクリプションの再初期化が必要になることを許可します。force_reinit_subscription のデータ型は bit で、既定値は 0 です。

    0 に設定すると、アーティクルへの変更によってサブスクリプションが再初期化されることはありません。変更に既存のサブスクリプションの再初期化が必要であることをストアド プロシージャが検出すると、エラーが発生し、変更は加えられません。

    1 は、アーティクルの変更によって既存のサブスクリプションが再初期化されることを示し、サブスクリプションの再初期化を許可します。

    変更によって既存のサブスクリプションの再初期化が必要になるプロパティについては、「解説」を参照してください。

  • [ @publisher= ] 'publisher'
    SQL Server 以外のパブリッシャを指定します。publisher のデータ型は sysname で、既定値は NULL です。

    注意

    SQL Server パブリッシャでアーティクルのプロパティを変更する場合は、publisher は使用しないでください。

リターン コードの値

成功した場合は 0 を、失敗した場合は 1 をそれぞれ返します。

説明

sp_changearticle は、スナップショット レプリケーションおよびトランザクション レプリケーションで使用します。

ピア ツー ピア トランザクション レプリケーションをサポートしているパブリケーションにアーティクルが属している場合は、descriptionins_cmdupd_cmd、および del_cmd プロパティのみを変更できます。

次のプロパティを変更するには、新しいスナップショットを生成する必要があります。また、force_invalidate_snapshot パラメータに値 1 を指定する必要があります。

  • del_cmd

  • dest_table

  • destination_owner

  • ins_cmd

  • pre_creation_cmd

  • schema_options

  • upd_cmd

次のプロパティのいずれかを変更するには、既存のサブスクリプションを再初期化する必要があります。また force_reinit_subscription パラメータに値 1 を指定する必要があります。

  • del_cmd

  • dest_table

  • destination_owner

  • filter

  • ins_cmd

  • status

  • upd_cmd

既存のパブリケーションの内部では、パブリケーション全体を削除してから再作成しなくても、sp_changearticle を使用して 1 つのアーティクルを変更できます。

注意

schema_option の値を変更すると、ビットごとの更新は実行されません。つまり、sp_changearticle を使用して schema_option を設定すると、既存のビット設定が無効になる可能性があります。既存の設定を維持するには、設定する値と、schema_option の現在の値の間で、& (ビット演算子 AND) を実行する必要があります。schema_option の現在の値は、sp_helparticle を実行することによって判断できます。

有効なスキーマ オプション

次の表では、レプリケーションの種類 (トランザクションまたはスナップショット) とアーティクルの種類 (1 列目のデータ) に基づいて、schema_option に指定できる値について説明します。

アーティクルの種類

レプリケーションの種類

 

 

トランザクション レプリケーション

スナップショット

logbased

すべてのオプション

0x02 を除くすべてのオプション

logbased manualfilter

すべてのオプション

0x02 を除くすべてのオプション

logbased manualview

すべてのオプション

0x02 を除くすべてのオプション

indexed view logbased

すべてのオプション

0x02 を除くすべてのオプション

indexed view logbased manualfilter

すべてのオプション

0x02 を除くすべてのオプション

indexed view logbased manualview

すべてのオプション

0x02 を除くすべてのオプション

indexed view logbase manualboth

すべてのオプション

0x02 を除くすべてのオプション

proc exec

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

serializable proc exec

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

proc schema only

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

view schema only

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x40000000、および 0x80000000

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x40000000、および 0x80000000

func schema only

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

indexed view schema only

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x40000000、および 0x80000000

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x40000000、および 0x80000000

注意

キュー更新パブリケーションの場合は、schema_option 値 0x80 を有効にする必要があります。SQL Server 以外のパブリケーションに対してサポートされている schema_option 値は、0x010x020x100x400x800x1000、および 0x4000 です。

使用例

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2008R2]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

権限

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