sp_addmergearticle (Transact-SQL)

既存のマージ パブリケーションにアーティクルを追加します。このストアド プロシージャは、パブリッシャー側でパブリケーション データベースについて実行されます。

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

構文

sp_addmergearticle [ @publication = ] 'publication' 
        , [ @article = ] 'article' 
        , [ @source_object = ] 'source_object' 
    [ , [ @type = ] 'type' ] 
    [ , [ @description = ] 'description' ] 
    [ , [ @column_tracking = ] 'column_tracking' ] 
    [ , [ @status = ] 'status' ] 
    [ , [ @pre_creation_cmd = ] 'pre_creation_cmd' ] 
    [ , [ @creation_script = ] 'creation_script' ] 
    [ , [ @schema_option = ] schema_option ] 
    [ , [ @subset_filterclause = ] 'subset_filterclause' ] 
    [ , [ @article_resolver = ] 'article_resolver' ] 
    [ , [ @resolver_info = ] 'resolver_info' ] 
    [ , [ @source_owner = ] 'source_owner' ] 
    [ , [ @destination_owner = ] 'destination_owner' ] 
    [ , [ @vertical_partition = ] 'vertical_partition' ] 
    [ , [ @auto_identity_range = ] 'auto_identity_range' ] 
    [ , [ @pub_identity_range = ] pub_identity_range ] 
    [ , [ @identity_range = ] identity_range ] 
    [ , [ @threshold = ] threshold ] 
    [ , [ @verify_resolver_signature = ] verify_resolver_signature ] 
    [ , [ @destination_object = ] 'destination_object' ] 
    [ , [ @allow_interactive_resolver = ] 'allow_interactive_resolver' ] 
    [ , [ @fast_multicol_updateproc = ] 'fast_multicol_updateproc' ] 
    [ , [ @check_permissions = ] check_permissions ] 
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @published_in_tran_pub = ] 'published_in_tran_pub' ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @logical_record_level_conflict_detection = ] 'logical_record_level_conflict_detection' ]
    [ , [ @logical_record_level_conflict_resolution = ] 'logical_record_level_conflict_resolution' ]
    [ , [ @partition_options = ] partition_options ]
    [ , [ @processing_order = ] processing_order ]
    [ , [ @subscriber_upload_options = ] subscriber_upload_options ]
    [ , [ @identityrangemanagementoption = ] 'identityrangemanagementoption' ]
    [ , [ @delete_tracking = ] delete_tracking ]
    [ , [ @compensate_for_errors = ] 'compensate_for_errors' ] 
    [ , [ @stream_blob_columns = ] 'stream_blob_columns' ]

引数

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

  • [ @article= ] 'article'
    アーティクルの名前を指定します。名前はパブリケーション内で一意であることが必要です。article のデータ型は sysname で、既定値はありません。article は、Microsoft SQL Server を実行するローカル コンピューター上に存在している必要があり、また識別子のルールに従っている必要があります。

  • [ @source_object= ] 'source_object'
    パブリッシュされるデータベース オブジェクトを指定します。source_object のデータ型は sysname で、既定値はありません。マージ レプリケーションを使用してパブリッシュできるオブジェクトの種類の詳細については、「データとデータベース オブジェクトのパブリッシュ」を参照してください。

  • [ @type= ] 'type'
    アーティクルの種類を指定します。type のデータ型は sysname で、既定値は table です。次のいずれかの値を指定できます。

    説明

    table (既定値)

    スキーマとデータを持つテーブルです。レプリケーションはテーブルを監視して、レプリケートするデータを特定します。

    func schema only

    スキーマのみを使用する関数。

    indexed viewschema only

    スキーマのみを使用するインデックス付きビュー。

    proc schema only

    スキーマのみを使用するストアド プロシージャ。

    synonym schema only

    スキーマのみを使用するシノニム。

    view schema only

    スキーマのみを使用するビュー。

  • [ @description= ] 'description'
    アーティクルの説明を指定します。description のデータ型は nvarchar(255) で、既定値は NULL です。

  • [ @column_tracking= ] 'column_tracking'
    列レベルの追跡の設定を指定します。column_tracking のデータ型は nvarchar(10) で、既定値は FALSE です。true を指定すると、列の追跡が有効になります。false を指定すると、列の追跡は無効になり、競合検出は行レベルのままです。テーブルが他のマージ レプリケーションで既にパブリッシュされている場合は、このテーブルに基づく既存のアーティクルが使用しているものと同じ列追跡値を使用する必要があります。このパラメーターは、テーブル アーティクルのみに固有のものです。

    注意

    競合検出で行の追跡を使用する場合 (既定)、ベース テーブルには最大 1,024 列を含めることができます。ただし、最大で 246 列がパブリッシュされるように、列をアーティクルからフィルター処理する必要があります。列の追跡を使用する場合、ベース テーブルには最大 246 列を含めることができます。追跡レベルの詳細については、「マージ レプリケーションで競合を検出および解決する方法」の「追跡レベル」を参照してください。

  • [ @status= ] 'status'
    アーティクルの状態を指定します。status のデータ型は nvarchar(10) で、既定値は unsynced です。active を指定した場合は、テーブルをパブリッシュする初期処理スクリプトが実行されます。unsynced を指定した場合は、スナップショット エージェントが次回実行されるときに、テーブルをパブリッシュする初期処理スクリプトが実行されます。

  • [ @pre_creation_cmd= ] 'pre_creation_cmd'
    スナップショットの適用時、サブスクライバーにテーブルが存在した場合にシステムが実行する処理を指定します。pre_creation_cmd のデータ型は nvarchar(10) で、次のいずれかの値を指定できます。

    説明

    none

    サブスクライバーに既にテーブルがある場合、操作は何も行われません。

    delete

    サブセット フィルター内の WHERE 句に基づいて削除します。

    drop (既定値)

    テーブルを再作成する前に削除します。Microsoft SQL Server Compact 3.5 SP2 サブスクライバーをサポートする場合に必要です。

    truncate

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

  • [ @creation_script= ] 'creation_script'
    オプションのアーティクル スキーマ スクリプトのパスと名前を指定します。このスクリプトは、サブスクリプション データベースでアーティクルを作成する場合に使用されます。creation_script のデータ型は nvarchar(255) で、既定値は NULL です。

    注意

    作成スクリプトは SQL Server Compact 3.5 SP2 サブスクライバー上では実行されません。

  • [ @schema_option= ] schema_option
    特定のアーティクルに対するスキーマ生成オプションのビットマップを指定します。schema_option のデータ型は binary(8) で、次の 1 つ以上の値から求めた | (ビット演算子 OR) 演算の結果を指定できます。

    説明

    0x00

    スナップショット エージェントによるスクリプト作成を無効にして、creation_script で定義されたスキーマ事前作成スクリプトを使用します。

    0x01

    オブジェクト作成 (CREATE TABLE、CREATE PROCEDURE など) を生成します。ストアド プロシージャ アーティクルの既定値です。

    0x10

    対応するクラスター化インデックスを生成します。このオプションが設定されていない場合でも、パブリッシュされたテーブルに主キーと UNIQUE 制約が既に定義されている場合は、これらの主キーや制約に関連するインデックスが生成されます。

    0x20

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

    0x40

    対応する非クラスター化インデックスを生成します。このオプションが設定されていない場合でも、パブリッシュされたテーブルに主キーと UNIQUE 制約が既に定義されている場合は、これらの主キーや制約に関連するインデックスが生成されます。

    0x80

    PRIMARY KEY 制約をレプリケートします。0x10 および 0x40 オプションが有効になっていない場合でも、この制約に関連するインデックスがあれば、そのインデックスもレプリケートされます。

    0x100

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

    0x200

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

    0x400

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

    0x800

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

    0x1000

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

    0x2000

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

    0x4000

    UNIQUE 制約をレプリケートします。0x10 および 0x40 オプションが有効になっていない場合でも、この制約に関連するインデックスがあれば、そのインデックスもレプリケートされます。

    0x8000

    このオプションは、SQL Server 2005 以降のバージョンを実行しているパブリッシャーでは有効ではありません。

    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 型の列をレプリケートできるように、共通言語ランタイム (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 型の列のインデックスをレプリケートします。

    この値が NULL の場合は、アーティクルの有効なスキーマ オプションが自動生成されます。「解説」に記載されている既定のスキーマ オプションの表は、アーティクルの種類に基づいて選択される値を示しています。一部のレプリケーションの種類およびアーティクルの種類に対しては、無効な schema_option 値もあります。「解説」に記載されている有効なスキーマ オプションの表は、特定の種類のアーティクルに対して指定できるオプションを示しています。

    注意

    schema_option パラメーターは、初期スナップショットのレプリケーション オプションにのみ影響します。初期スキーマがスナップショット エージェントによって生成され、サブスクライバーで適用されると、サブスクライバーに対するパブリケーション スキーマの変更のレプリケーションが、スキーマ変更レプリケーション ルールと、sp_addmergepublication で指定された replicate_ddl パラメーターの設定に基づいて行われます。詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。

  • [ @subset_filterclause= ] 'subset_filterclause'
    テーブル アーティクルの行フィルター選択を指定する、WHERE という語が含まれていない WHERE 句を指定します。subset_filterclause のデータ型は nvarchar(1000) で、既定値は空の文字列です。

    重要な注意事項重要

    パラメーター化された行フィルター句では列名に関数を適用しないことをお勧めします。これは、LEFT([MyColumn]) = SUSER_SNAME() のように指定すると、パフォーマンスに問題が生じるためです。フィルター句に HOST_NAME を指定して HOST_NAME 値よりも優先的に使用する場合は、CONVERT を使ってデータ型を変換する必要があります。このようなケースのベスト プラクティスに関する詳細については、「パラメーター化された行フィルター」の「HOST_NAME() 値の上書き」を参照してください。

  • [ @article_resolver= ] 'article_resolver'
    テーブル アーティクルで競合の回避に使用する COM ベースの競合回避モジュール、またはテーブル アーティクルでカスタム ビジネス ロジックを実行するために起動される .NET Framework アセンブリを指定します。article_resolver のデータ型は varchar(255) で、既定値は NULL です。このパラメーターで利用できる値の一覧については、「Microsoft カスタム競合回避モジュール」を参照してください。指定した値が Microsoft 競合回避モジュールの値でない場合、SQL Server では、システムに付属の競合回避モジュールの代わりに指定した競合回避モジュールが使用されます。利用可能なカスタム競合回避モジュールを列挙するには、sp_enumcustomresolvers を使用します。詳細については、「マージ同期中のビジネス ロジックの実行」および「マージ レプリケーションの競合検出および解決の詳細」を参照してください。

  • [ @resolver_info= ] 'resolver_info'
    カスタム競合回避モジュールが必要とする追加の情報を指定する場合に使用します。一部の Microsoft 競合回避モジュールには、入力用の列が必要です。resolver_info のデータ型は nvarchar(255) で、既定値は NULL です。詳細については、「Microsoft COM ベースの競合回避モジュール」を参照してください。

  • [ @source_owner= ] 'source_owner'
    source_object の所有者の名前を指定します。source_owner のデータ型は sysname で、既定値は NULL です。NULL を指定した場合は、現在のユーザーが所有者であるものと見なされます。

  • [ @destination_owner= ] 'destination_owner'
    サブスクリプション データベースのオブジェクトの所有者を指定します。所有者が 'dbo' でなければ、destination_owner のデータ型は sysname で、既定値は NULL です。NULL を指定した場合は、'dbo' が所有者であるものと見なされます。

  • [ @vertical_partition= ] 'column_filter'
    テーブル アーティクル上の列フィルター選択を有効または無効にします。vertical_partition のデータ型は nvarchar(5) で、既定値は FALSE です。

    false は、列フィルター選択を行わずに、すべての列をパブリッシュすることを示します。

    true は、宣言された主キー列と ROWGUID 列を除くすべての列を消去します。列は、sp_mergearticlecolumn を使用して追加されます。

  • [ @auto_identity_range= ] 'automatic_identity_range'
    パブリケーションの作成時に、パブリケーション上でこのテーブル アーティクルの ID 範囲の自動処理を有効または無効にします。auto_identity_range のデータ型は nvarchar(5) で、既定値は FALSE です。true を指定した場合は ID 範囲の自動処理が有効になり、false を指定した場合は無効になります。

    注意

    auto_identity_range は推奨されておらず、旧バージョンとの互換性のためのみに用意されています。ID 範囲の管理オプションを指定するには、identityrangemanagementoption を使用してください。詳細については、「ID 列のレプリケート」を参照してください。

  • [ @pub_identity_range= ] pub_identity_range
    自動 ID 範囲の管理を使用しているときに、サーバー サブスクリプションでサブスクライバーに割り当てられる ID 範囲のサイズを制御します。この ID 範囲は、再パブリッシュ元のサブスクライバーが自らのサブスクライバーに割り当てるために予約されています。pub_identity_range のデータ型は bigint で、既定値は NULL です。identityrangemanagementoption が auto の場合または auto_identity_range が true の場合に、このパラメーターを指定する必要があります。

  • [ @identity_range= ] identity_range
    自動 ID 範囲の管理を使用するときに、パブリッシャーとサブスクライバーの両方に割り当てられる ID 範囲のサイズを制御します。identity_range のデータ型は bigint で、既定値は NULL です。identityrangemanagementoption が auto の場合または auto_identity_range が true の場合に、このパラメーターを指定する必要があります。

    注意

    identity_range は、以前のバージョンの SQL Server を使用している再パブリッシュ元のサブスクライバーに対して、ID 範囲のサイズを制御します。

  • [ @threshold= ] threshold
    マージ エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージ値です。threshold で指定されている値のパーセンテージが使用されると、マージ エージェントは新しい ID 範囲を作成します。threshold のデータ型は int で、既定値は NULL です。identityrangemanagementoption が auto の場合または auto_identity_range が true の場合に、このパラメーターを指定する必要があります。

  • [ @verify_resolver_signature= ] verify_resolver_signature
    マージ レプリケーションで競合回避モジュールを使用する前に、デジタル署名を検証するかどうかを指定します。verify_resolver_signature のデータ型は int で、既定値は 1 です。

    0 に設定すると、署名を検証しません。

    1 に設定すると、信頼関係のあるソースの署名であるかどうかを判断するために、署名を検証します。

  • [ @destination_object= ] 'destination_object'
    サブスクリプション データベース内のオブジェクトの名前を指定します。destination_object のデータ型は sysname で、既定値は @source_object 内の値です。このパラメーターは、アーティクルが、ストアド プロシージャ、ビュー、UDF など、スキーマ専用アーティクルである場合にのみ指定できます。指定したアーティクルがテーブル アーティクルの場合、destination_object 内の値より @source_object 内の値が優先されます。

  • [ @allow_interactive_resolver= ] 'allow_interactive_resolver'
    アーティクルに対するインタラクティブ競合回避モジュールの使用を有効または無効にします。allow_interactive_resolver のデータ型は nvarchar(5) で、既定値は FALSE です。true を指定した場合はアーティクルに対するインタラクティブ競合回避モジュールの使用が有効になり、false を指定した場合は無効になります。

    注意

    対話型競合回避モジュールは、SQL Server Compact 3.5 SP2 サブスクライバーではサポートされません。

  • [ @fast_multicol_updateproc= ] 'fast_multicol_updateproc'
    このパラメーターは、スクリプトの下位互換性を確保するために用意されているものであり、推奨されません。

  • [ @check_permissions= ] check_permissions
    マージ エージェントがパブリッシャーに変更を適用するときに確認されるテーブルレベル権限のビットマップです。マージ処理が使用するパブリッシャーのログインまたはユーザー アカウントが正しいテーブル権限を持たない場合、無効な変更は競合としてログに記録されます。check_permissions のデータ型は int で、次の 1 つ以上の値に関する | (ビット演算子 OR) の結果を指定できます。

    説明

    0x00 (既定値)

    権限は確認されません。

    0x10

    サブスクライバーで行われる挿入操作をアップロードする前に、パブリッシャーでの権限を確認します。

    0x20

    サブスクライバーで行われる更新操作をアップロードする前に、パブリッシャーでの権限を確認します。

    0x40

    サブスクライバーで行われる削除操作をアップロードする前に、パブリッシャーでの権限を確認します。

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

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

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

  • [ @published_in_tran_pub= ] 'published_in_tran_pub'
    マージ パブリケーションのアーティクルが、トランザクション パブリケーションでもパブリッシュされることを示します。published_in_tran_pub のデータ型は nvarchar(5) で、既定値は FALSE です。true を指定した場合は、アーティクルがトランザクション パブリケーションでもパブリッシュされます。

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

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

    1 に設定すると、マージ アーティクルへの変更によって既存のサブスクリプションが再初期化されることを意味し、サブスクリプションの再初期化を行う権限が与えられます。subset_filterclause でパラメーター化された行フィルターを指定するときは、force_reinit_subscription を 1 に設定します。

  • [ @logical_record_level_conflict_detection= ] 'logical_record_level_conflict_detection'
    論理レコードのメンバーであるアーティクルの競合検出レベルを指定します。logical_record_level_conflict_detection のデータ型は nvarchar(5) で、既定値は FALSE です。

    true を指定した場合、論理レコードのどこかで変更が行われた場合に競合が検出されます。

    false を指定した場合、column_tracking によって指定された既定の競合検出が使用されます。詳細については、「論理レコードによる関連行への変更のグループ化」を参照してください。

    注意

    論理レコードは SQL Server Compact 3.5 SP2 サブスクライバーではサポートされていません。このサブスクライバーに対応するには、logical_record_level_conflict_detection に値 false を指定する必要があります。

  • [ @logical_record_level_conflict_resolution= ] 'logical_record_level_conflict_resolution'
    論理レコードのメンバーであるアーティクルの競合解決レベルを指定します。logical_record_level_conflict_resolution のデータ型は nvarchar(5) で、既定値は FALSE です。

    true を指定した場合、優先される論理レコード全体で、優先されなかった論理レコードを上書きします。

    false を指定した場合は、優先される行が論理レコードに制約されません。logical_record_level_conflict_detection が true の場合は、logical_record_level_conflict_resolution も true に設定する必要があります。詳細については、「論理レコードによる関連行への変更のグループ化」を参照してください。

    注意

    論理レコードは SQL Server Compact 3.5 SP2 サブスクライバーではサポートされていません。このサブスクライバーに対応するには、logical_record_level_conflict_resolution に値 false を指定する必要があります。

  • [ @partition_options= ] partition_options
    アーティクル内のデータをパーティション分割する方法を定義します。パーティション分割することにより、すべての行が 1 つのパーティションまたは 1 つのサブスクリプションに属している場合に、パフォーマンスを最適化できます。partition_options のデータ型は tinyint で、次のいずれかの値を指定できます。

    説明

    0 (既定値)

    アーティクルのフィルター選択は、静的であるか、または各パーティションのデータの一意のサブセットを作成しません。つまり "重複する" パーティションになります。

    1

    パーティションは重複しています。サブスクライバーで実行されたデータ操作言語 (DML) 更新では、行が属するパーティションを変更できません。

    2

    アーティクルのフィルター選択により、重複しないパーティションが生成されますが、複数のサブスクライバーが同じパーティションを受け取ることができます。

    3

    アーティクルのフィルター選択により、各サブスクリプションに対して、一意で重複しないパーティションが作成されます。

    注意

    アーティクルのソース テーブルが既に別のパブリケーションでパブリッシュされている場合、partition_options の値は両方のアーティクルで同じである必要があります。

  • [ @processing_order= ] processing_order
    マージ パブリケーション内のアーティクルの処理順序を示します。processing_order のデータ型は int で、既定値は 0 です。0 の場合、アーティクルの順序は設定されません。その他の値は、このアーティクルの処理順序の序数を表します。アーティクルは、最も小さい値から最も大きい値の順序で処理されます。2 つのアーティクルが同じ値を持つ場合、処理順序は sysmergearticles システム テーブル内のアーティクルのニックネームの順序で決まります。詳細については、「マージ アーティクルの処理順序の指定」を参照してください。

  • [ @subscriber_upload_options= ] subscriber_upload_options
    サブスクライバーにおける、クライアント サブスクリプションを使用した更新に対する制限を定義します。詳細については、「ダウンロード専用アーティクルを使用したマージ レプリケーションのパフォーマンス最適化」を参照してください。subscriber_upload_options のデータ型は tinyint で、次のいずれかの値を指定できます。

    説明

    0 (既定値)

    制限はありません。サブスクライバーで行われた変更は、パブリッシャーにアップロードされます。

    1

    サブスクライバーでの変更は許可されますが、パブリッシャーにはアップロードされません。

    2

    サブスクライバーでの変更は許可されません。

    注意

    アーティクルのソース テーブルが既に別のパブリケーションでパブリッシュされている場合、subscriber_upload_options の値は両方のアーティクルで同じである必要があります。

  • [ @identityrangemanagementoption= ] identityrangemanagementoption
    アーティクルに対する ID 範囲の管理がどのように処理されるかを指定します。identityrangemanagementoption のデータ型は nvarchar(10) で、次のいずれかの値を指定できます。

    説明

    none

    ID 範囲の管理を無効にします。

    manual

    NOT FOR REPLICATION を使用して手動による ID 範囲処理を有効にしている ID 列にマークを付けます。

    auto

    ID 範囲の自動管理を指定します。

    NULL (既定値)

    auto_identity_range の値が true ではない場合、既定値は noneです。

    旧バージョンとの互換性を維持するために、identityrangemanagementoption の値が NULL の場合は、auto_identity_range の値が確認されます。identityrangemanagementoption の値が NULL ではない場合は、auto_identity_range の値は無視されます。詳細については、「ID 列のレプリケート」を参照してください。

  • [ @delete_tracking= ] 'delete_tracking'
    削除がレプリケートされるかどうかを示します。delete_tracking のデータ型は nvarchar(5) で、既定値は TRUE です。false の場合は、削除がレプリケートされないことを示します。true の場合は、削除がレプリケートされることを示します。これはマージ レプリケーションの通常の動作です。delete_tracking を false に設定した場合、サブスクライバー側で削除した行はパブリッシャー側で手動で削除する必要があり、パブリッシャー側で削除した行はサブスクライバー側で手動で削除する必要があります。

    重要な注意事項重要

    delete_tracking を false に設定した場合、収束できなくなります。アーティクルのソース テーブルが既に別のパブリケーションでパブリッシュされている場合、delete_tracking の値は両方のアーティクルで同じである必要があります。

    注意

    パブリケーションの新規作成ウィザードまたは [パブリケーションのプロパティ] ダイアログ ボックスを使用して delete_tracking オプションを設定することはできません。

  • [ @compensate_for_errors= ] 'compensate_for_errors'
    同期中にエラーが発生したときに、補正操作を実行するかどうかを示します。compensate_for_errors i のデータ型は nvarchar(5) で、既定値は FALSE です。true に設定した場合、同期中にサブスクライバーまたはパブリッシャーで適用できない変更があると、その変更を元に戻す補正アクションが常に実行されます。ただし、サブスクライバーの構成が不適切な場合、それが原因でエラーが発生して、他のサブスクライバーおよびパブリッシャーで変更が取り消され、元の状態に戻ることがあります。false に設定した場合、この補正アクションは無効になります。ただし、エラーは補正アクションと同様にログに記録され、それ以降のマージでは、引き続き変更の適用が成功するまで試行されます。

    注意

    Microsoft SQL Server 2000 8.00.858 以前 (SP3 を含む) を実行しているサブスクライバー側のプル サブスクリプションでは、compensate_for_errors が false に設定された状態でも、補正アクションが発生します。

    重要な注意事項重要

    影響を受ける行のデータは収束されないように見えますが、エラーを解決すると、変更は直ちに適用可能となり、データは収束されます。アーティクルのソース テーブルが既に別のパブリケーションでパブリッシュされている場合、compensate_for_errors の値は両方のアーティクルで同じである必要があります。

  • [ @stream_blob_columns= ] 'stream_blob_columns'
    バイナリ ラージ オブジェクトの列をレプリケートするときに、データ ストリームの最適化を使用します。stream_blob_columns のデータ型は nvarchar(5) で、既定値は FALSE です。true の場合は、最適化が試行されることを示します。FILESTREAM が有効になっている場合、stream_blob_columns は true に設定されます。これにより、FILESTREAM データのレプリケーションを最適な形で実行し、メモリ使用率を低減できます。FILESTREAM のテーブル アーティクルで BLOB ストリームが使用されないようにするには、sp_changemergearticle を使用して stream_blob_columns を false に設定してください。

    重要な注意事項重要

    このメモリ最適化を有効にすると、同期を行うときにマージ エージェントのパフォーマンスが低下する場合があります。このオプションは、数メガバイトに及ぶデータが含まれる列をレプリケートする場合にのみ使用してください。

    注意

    stream_blob_columns が true に設定されている場合でも、バイナリ ラージ オブジェクトをレプリケートするときに、論理レコードなどの特定のマージ レプリケーション機能によって、ストリームの最適化の使用が妨げられる可能性があります。

リターン コードの値

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

説明

sp_addmergearticle はマージ レプリケーションで使用します。

オブジェクトをパブリッシュすると、その定義がサブスクライバーにコピーされます。他の 1 つ以上のオブジェクトに依存しているデータベース オブジェクトをパブリッシュする場合は、参照されるオブジェクトをすべてパブリッシュする必要があります。たとえば、テーブルに依存しているビューをパブリッシュする場合は、そのテーブルもパブリッシュする必要があります。

partition_options に値 3 を指定した場合、該当するアーティクル内にあるデータの各パーティションに対して、単一のサブスクリプションのみを使用できます。第 2 のサブスクリプションを作成し、その新しいサブスクリプションのフィルター選択条件が既存のサブスクリプションと同じパーティションとして判別される場合、既存のサブスクリプションは削除されます。

partition_options に値 3 を指定すると、マージ エージェントが実行されるたびにメタデータがクリーンアップされ、パーティション スナップショットの有効期限が短くなります。このオプションを使用するときは、サブスクライバーが要求したパーティション スナップショットを有効にすることを検討してください。詳細については、「パラメータ化されたフィルタを使用したマージ パブリケーションのスナップショット」を参照してください。

subset_filterclause を使用して、静的行フィルターを持つアーティクルを、パラメーター化されたフィルターを持つアーティクルが含まれている既存のパブリケーションに追加するには、サブスクリプションを再初期化する必要があります。

processing_order を指定するときには、アーティクルの順序を示す値の間にギャップを残しておくことをお勧めします。そうすることにより、将来新しい値を設定するのが簡単になります。たとえば、Article1、Article2、Article3 の 3 つのアーティクルがある場合、processing_order を 1、2、3 ではなく、10、20、30 のように設定します。詳細については、「マージ アーティクルの処理順序の指定」を参照してください。

既定のスキーマ オプションの一覧

次の表では、schema_option に NULL 値を指定した場合に、このストアド プロシージャによって設定される既定の値を示します。この値はアーティクルの種類によって異なります。

アーティクルの種類

スキーマ オプションの値

func schema only

0x01

indexed view schema only

0x01

proc schema only

0x01

table

  • 0x0C034FD1 - SQL Server 2005 以降のバージョン互換のパブリケーション (ネイティブ モード スナップショット)。

  • 0x08034FF1 - SQL Server 2005 以降のバージョン互換のパブリケーション (キャラクター モード スナップショット)。

  • 0x30034FF1 - SQL Server 2000 以前のバージョン互換のパブリケーション。

view schema only

0x01

注意

パブリケーションが以前のバージョンの SQL Server をサポートする場合、table の既定のスキーマ オプションは 0x30034FF1 です。

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

次の表に、アーティクルの種類に応じて許可される schema_option の値を示します。

アーティクルの種類

スキーマ オプションの値

func schema only

0x01 および 0x2000

indexed view schema only

0x010x0400x01000x20000x400000x1000000、および 0x200000

proc schema only

0x01 および 0x2000

table

すべてのオプション

view schema only

0x010x0400x01000x20000x400000x1000000、および 0x200000

使用例

DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @table3 AS sysname;
DECLARE @salesschema AS sysname;
DECLARE @hrschema AS sysname;
DECLARE @filterclause AS nvarchar(1000);
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @table1 = N'Employee'; 
SET @table2 = N'SalesOrderHeader'; 
SET @table3 = N'SalesOrderDetail'; 
SET @salesschema = N'Sales';
SET @hrschema = N'HumanResources';
SET @filterclause = N'Employee.LoginID = HOST_NAME()';

-- Add a filtered article for the Employee table.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_object = @table1, 
  @type = N'table', 
  @source_owner = @hrschema,
  @schema_option = 0x0004CF1,
  @description = N'article for the Employee table',
  @subset_filterclause = @filterclause;

-- Add an article for the SalesOrderHeader table that is filtered
-- based on Employee and horizontally filtered.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_object = @table2, 
  @type = N'table', 
  @source_owner = @salesschema, 
  @vertical_partition = N'true',
  @schema_option = 0x0034EF1,
  @description = N'article for the SalesOrderDetail table';

-- Add an article for the SalesOrderDetail table that is filtered
-- based on SaledOrderHeader.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table3, 
  @source_object = @table3, 
  @source_owner = @salesschema,
  @description = 'article for the SalesOrderHeader table', 
  @identityrangemanagementoption = N'auto', 
  @pub_identity_range = 100000, 
  @identity_range = 100, 
  @threshold = 80,
  @schema_option = 0x0004EF1;

-- Add all columns to the SalesOrderHeader article.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Remove the credit card Approval Code column.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @column = N'CreditCardApprovalCode', 
  @operation = N'drop', 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between Employee and SalesOrderHeader.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table2, 
  @filtername = N'SalesOrderHeader_Employee', 
  @join_articlename = @table1, 
  @join_filterclause = N'Employee.BusinessEntityID = SalesOrderHeader.SalesPersonID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table3, 
  @filtername = N'SalesOrderDetail_SalesOrderHeader', 
  @join_articlename = @table2, 
  @join_filterclause = N'SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;
GO

権限

固定サーバー ロール sysadmin または固定データベース ロール db_owner のメンバーシップが必要です。