sp_addmergearticle (Transact-SQL)

更新 : 2006 年 4 月 14 日

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

トピック リンク アイコン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 view schema 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 を指定すると、列の追跡は無効になり、競合の検出は行レベルのままです。テーブルが他のマージ レプリケーションで既にパブリッシュされている場合は、このテーブルに基づく既存のアーティクルが使用しているものと同じ列追跡値を使用する必要があります。このパラメータは、テーブル アーティクルのみに固有のものです。

    ms174329.note(ja-jp,SQL.90).gifメモ :
    競合の検出で行の追跡を使用する場合 (既定)、ベース テーブルには最大 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 2005 Compact Edition サブスクライバをサポートする場合に必要です。

    truncate

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

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

    ms174329.note(ja-jp,SQL.90).gifメモ :
    作成スクリプトは SQL Server 2005 Compact Edition サブスクライバ上では実行されません。
  • [ @schema_option= ] schema_option
    特定のアーティクルに対するスキーマ生成オプションのビットマップを指定します。schema_option のデータ型は binary(8) で、次の 1 つ以上の値から求めた | (ビット演算子 OR) 演算の結果を指定できます。

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

    ms174329.note(ja-jp,SQL.90).gif重要 :
    パラメータ化された行フィルタ句では列名に関数を適用しないことをお勧めします。これは、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 に設定すると無効になります。

    ms174329.note(ja-jp,SQL.90).gifメモ :
    auto_identity_range は推奨されておらず、旧バージョンとの互換性のためのみに用意されています。ID 範囲の管理オプションを指定するには、identityrangemanagementoption を使用してください。詳細については、「ID 列のレプリケート」を参照してください。
  • [ @pub_identity_range= ] pub_identity_range
    自動 ID 範囲の管理を使用しているときに、サーバー サブスクリプションでサブスクライバに割り当てられる ID 範囲のサイズを制御します。この ID 範囲は、再パブリッシュ元のサブスクライバが自らのサブスクライバに割り当てるために予約されています。pub_identity_range のデータ型は bigint で、既定値は NULL です。identityrangemanagementoptionauto であるか、auto_identity_rangetrue の場合には、このパラメータを指定する必要があります。
  • [ @identity_range= ] identity_range
    自動 ID 範囲の管理を使用するときに、パブリッシャとサブスクライバの両方に割り当てられる ID 範囲のサイズを制御します。identity_range のデータ型は bigint で、既定値は NULL です。identityrangemanagementoptionauto であるか、auto_identity_rangetrue の場合には、このパラメータを指定する必要があります。

    ms174329.note(ja-jp,SQL.90).gifメモ :
    identity_range は、以前のバージョンの SQL Server を使用している再パブリッシュ元のサブスクライバに対して、ID 範囲のサイズを制御します。
  • [ @threshold= ] threshold
    マージ エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージ値です。threshold で指定されている値のパーセンテージが使用されると、マージ エージェントは新しい ID 範囲を作成します。threshold のデータ型は int で、既定値は NULL です。identityrangemanagementoptionauto であるか、auto_identity_rangetrue の場合には、このパラメータを指定する必要があります。
  • [ @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 に設定すると無効になります。

    ms174329.note(ja-jp,SQL.90).gifメモ :
    対話型競合回避モジュールは、SQL Server 2005 Compact Edition サブスクライバではサポートされません。
  • [ @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_snapshot1 に設定します。

  • [ @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_subscription1 に設定します。

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

    TRUE に設定すると、論理レコードの任意の場所で変更が行われた場合に、競合が検出されます。

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

    ms174329.note(ja-jp,SQL.90).gifメモ :
    論理レコードは SQL Server 2005 Compact Edition サブスクライバではサポートされません。このサブスクライバに対応するには、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_detectionTRUE の場合は、logical_record_level_conflict_resolutionTRUE に設定する必要があります。詳細については、「論理レコードによる関連行への変更のグループ化」を参照してください。

    ms174329.note(ja-jp,SQL.90).gifメモ :
    論理レコードは SQL Server 2005 Compact Edition サブスクライバではサポートされません。このサブスクライバに対応するには、logical_record_level_conflict_resolution の値を FALSE に指定する必要があります。
  • [ @partition_options= ] partition_options
    アーティクル内のデータをパーティション分割する方法を定義します。パーティション分割することにより、すべての行が 1 つのパーティションまたは 1 つのサブスクリプションに属している場合に、パフォーマンスを最適化できます。partition_options のデータ型は tinyint で、次のいずれかの値を指定できます。

    説明

    0 (既定値)

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

    1

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

    2

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

    3

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

    ms174329.note(ja-jp,SQL.90).gifメモ :
    アーティクルのソース テーブルが既に別のパブリケーションでパブリッシュされている場合、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

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

    ms174329.note(ja-jp,SQL.90).gifメモ :
    アーティクルのソース テーブルが既に別のパブリケーションでパブリッシュされている場合、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_trackingFALSE に設定した場合、サブスクライバで削除した行はパブリッシャで、パブリッシャで削除した行はサブスクライバで、それぞれ手動で削除する必要があります。

    ms174329.note(ja-jp,SQL.90).gif重要 :
    delete_trackingfalse に設定すると、集約は行われません。アーティクルのソース テーブルが既に別のパブリケーションでパブリッシュされている場合、delete_tracking の値は両方のアーティクルで同じである必要があります。
    ms174329.note(ja-jp,SQL.90).gifメモ :
    パブリケーションの新規作成ウィザードまたは [パブリケーションのプロパティ] ダイアログ ボックスを使用して delete_tracking オプションを設定することはできません。
  • [ @compensate_for_errors= ] 'compensate_for_errors'
    同期中にエラーが発生したときに、補正操作を実行するかどうかを示します。compensate_for_errors i のデータ型は nvarchar(5) で、既定値は FALSE です。true の場合、同期中にサブスクライバまたはパブリッシャで適用できない変更があると、常に補正操作が実行され、変更が元に戻ります。ただし、不適切に構成されたサブスクライバでエラーが発生すると、他のサブスクライバやパブリッシャでの変更が元に戻ってしまう場合があります。false の場合、これらの補正操作は無効になります。ただし、エラーは補正操作と同様にログに記録されます。また後続のマージは継続され、変更の適用が成功するまで試行されます。

    ms174329.note(ja-jp,SQL.90).gifメモ :
    Microsoft SQL Server 2000 バージョン 8.00.858 以前 (SP3 を含む) を実行しているサブスクライバでのプル サブスクリプションの場合、compensate_for_errorsfalse に設定していても、補正操作は実行されます。
    ms174329.note(ja-jp,SQL.90).gif重要 :
    影響を受ける行のデータは収束されないように見えますが、エラーを解決すると、変更は直ちに適用可能となり、データは収束されます。アーティクルのソース テーブルが既に別のパブリケーションでパブリッシュされている場合、compensate_for_errors の値は両方のアーティクルで同じである必要があります。
  • [ @stream_blob_columns= ] 'stream_blob_columns'
    バイナリ ラージ オブジェクトの列をレプリケートするときに、データ ストリームの最適化を使用します。stream_blob_columns のデータ型は nvarchar(5) で、既定値は FALSE です。TRUE の場合は、最適化を試行します。

    ms174329.note(ja-jp,SQL.90).gif重要 :
    このメモリ最適化を有効にすると、同期を行うときにマージ エージェントのパフォーマンスが低下する場合があります。このオプションは、数メガバイトに及ぶデータが含まれる列をレプリケートする場合にのみ使用してください。
    ms174329.note(ja-jp,SQL.90).gifメモ :
    stream_blob_columnsTRUE に設定した場合でも、バイナリ ラージ オブジェクトをレプリケートするときに、論理レコードなどの特定のマージ レプリケーション機能によって、ストリームの最適化の使用が妨げられることがあります。

リターン コードの値

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

ms174329.note(ja-jp,SQL.90).gifメモ :
パブリケーションが以前のバージョンの 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

権限

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

使用例

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.EmployeeID = 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

参照

関連項目

sp_changemergearticle (Transact-SQL)
sp_dropmergearticle (Transact-SQL)
sp_helpmergearticle (Transact-SQL)
レプリケーション ストアド プロシージャ (Transact-SQL)

その他の技術情報

アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)
データとデータベース オブジェクトのパブリッシュ
ID 列のレプリケート
マージ レプリケーションで競合を検出および解決する方法

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 4 月 14 日

変更内容 :
  • schema_option パラメータの 0x20000000 値についての説明を更新。

2005 年 12 月 5 日

新しい内容
  • schema_option パラメータに 0x20 オプションを設定する場合の追加制約について説明を追加。
  • パブリッシュされたテーブルの列の制約について説明を追加。
変更内容 :
  • テーブル アーティクルの既定のスキーマ オプション値に関する情報を更新。