sp_addmergearticle (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

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

引数

[ @publication = ] N'publication'

アーティクルを含むパブリケーションの名前。 @publicationsysname で、既定値はありません。

[ @article = ] N'article'

アーティクルの名前。 名前はパブリケーション内で一意であることが必要です。 @articlesysname で、既定値はありません。 @article は、SQL Server を実行しているローカル コンピューター上にあり、識別子の規則に準拠している必要があります。

[ @source_object = ] N'source_object'

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

[ @type = ] N'type'

アーティクルの種類。 @typesysname で、既定値は table で、次のいずれかの値を指定できます。

Value 説明
table (既定値) スキーマとデータを含むテーブル。 レプリケーションはテーブルを監視して、レプリケートするデータを特定します。
func schema only スキーマのみの関数。
indexed view schema only スキーマのみを使用するインデックス付きビュー。
proc schema only スキーマのみを使用するストアド プロシージャ。
synonym schema only スキーマのみを使用するシノニム。
view schema only スキーマのみを使用するビュー。

[ @description = ] N'description'

記事の説明。 @descriptionnvarchar(255) で、既定値は NULL です。

[ @column_tracking = ] N'column_tracking'

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

Note

行レベルの追跡を使用して競合を検出する場合 (既定値)、ベース テーブルには最大 1,024 列含めることができますが、最大 246 列がパブリッシュされるようにアーティクルから列をフィルター選択する必要があります。 列の追跡を使用する場合、ベース テーブルには最大 246 列を含めることができます。

[ @status = ] N'status'

記事の状態。 @statusnvarchar(10) で、既定値は unsynced です。 active場合は、テーブルを発行する初期処理スクリプトが実行されます。 unsynced場合、テーブルを発行する初期処理スクリプトは、次にスナップショット エージェントが実行されるときに実行されます。

[ @pre_creation_cmd = ] N'pre_creation_cmd'

スナップショットの適用時、サブスクライバーにテーブルが存在した場合にシステムが実行する処理を指定します。 @pre_creation_cmdnvarchar(10)であり、次のいずれかの値を指定できます。

Value 説明
none テーブルがサブスクライバーに既に存在する場合、アクションは実行されません。
delete サブセット フィルターの WHERE 句に基づいて削除を発行します。
drop (既定) テーブルを再作成する前に削除します。 SQL Server Compact サブスクライバーをサポートするために必要です。
truncate コピー先テーブルを切り捨てます。

[ @creation_script = ] N'creation_script'

サブスクリプション データベースにアーティクルを作成するために使用するオプションのアーティクル スキーマ スクリプトのパスと名前。 @creation_scriptnvarchar(255) で、既定値は NULL です。

Note

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

[ @schema_option = ] schema_option

指定されたアーティクルのスキーマ生成オプションのビットマップ。 @schema_optionvarbinary(8)であり、 することができます|(ビットごとの OR) これらの値の 1 つ以上の積。

Value 説明
0x00 スナップショット エージェントによるスクリプト作成を無効にし、@creation_scriptで定義されている指定されたスキーマ事前作成スクリプトを使用します。
0x01 オブジェクトの作成 (CREATE TABLECREATE PROCEDUREなど) を生成します。 これは、ストアド プロシージャアーティクルの既定値です。
0x10 対応するクラスター化インデックスを生成します。 このオプションが設定されていない場合でも、主キーと UNIQUE 制約に関連するインデックスは、パブリッシュされたテーブルで既に定義されている場合に生成されます。
0x20 ユーザー定義データ型 (UDT) をサブスクライバーの基本データ型に変換します。 このオプションは、UDT 列に CHECK 制約または DEFAULT 制約がある場合、UDT 列が主キーの一部である場合、または計算列が UDT 列を参照している場合には使用できません。
0x40 対応する非クラスター化インデックスを生成します。 このオプションが設定されていない場合でも、主キーと UNIQUE 制約に関連するインデックスは、パブリッシュされたテーブルで既に定義されている場合に生成されます。
0x80 PRIMARY KEY制約をレプリケートします。 オプション 0x100x40 が有効になっていない場合でも、制約に関連するインデックスもレプリケートされます。
0x100 定義されている場合、テーブル アーティクル上のユーザー トリガーをレプリケートします。
0x200 FOREIGN KEY制約をレプリケートします。 参照先テーブルがパブリケーションの一部でない場合、パブリッシュされたテーブルのすべての FOREIGN KEY 制約はレプリケートされません。
0x400 CHECK制約をレプリケートします。
0x800 既定値をレプリケートします。
0x1000 列レベルの照合順序をレプリケートします。
0x2000 パブリッシュされたアーティクル ソース オブジェクトに関連付けられている拡張プロパティをレプリケートします。
0x4000 UNIQUE制約をレプリケートします。 オプション 0x100x40 が有効になっていない場合でも、制約に関連するインデックスもレプリケートされます。
0x8000 このオプションは、SQL Server 2005 (9.x) 以降のバージョンを実行しているパブリッシャーでは有効ではありません。
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 (9.x) で導入された大きなオブジェクト データ型 (nvarchar(max)varchar(max)、および varbinary(max)) を SQL Server 2000 (8.x) でサポートされているデータ型に変換します。
0x40000000 アクセス許可をレプリケートします。
0x80000000 パブリケーションの一部ではないオブジェクトへの依存関係の削除を試みます。
0x100000000 FILESTREAM属性が varbinary(max) 列で指定されている場合は、このオプションを使用してレプリケートします。 SQL Server 2005 (9.x) サブスクライバーにテーブルをレプリケートする場合は、このオプションを指定しないでください。 FILESTREAM 列を持つテーブルを SQL Server 2000 (8.x) サブスクライバーにレプリケートすることは、このスキーマ オプションの設定方法に関係なくサポートされていません。 関連するオプションの 0x800000000を参照してください。
0x200000000 SQL Server 2008 (10.0.x) で導入された日付と時刻のデータ型 (datetimedatetimeoffset、および datetime2) を、以前のバージョンの SQL Server でサポートされているデータ型に変換します。
0x400000000 データとインデックスの圧縮オプションをレプリケートします。 詳細については、「データ圧縮」を参照してください。
0x800000000 このオプションを設定すると、サブスクライバーの独自のファイル グループに FILESTREAM データを格納できます。 このオプションが設定されていない場合、FILESTREAM データは既定のファイル グループに格納されます。 レプリケーションではファイル グループは作成されません。そのため、このオプションを設定する場合は、サブスクライバーでスナップショットを適用する前にファイル グループを作成する必要があります。 スナップショットを適用する前にオブジェクトを作成する方法の詳細については、「 スナップショットが適用される前と後のスクリプトの実行」を参照してください

関連するオプションの 0x100000000を参照してください。
0x1000000000 共通言語ランタイム (CLR) ユーザー定義型 (UDT) を varbinary(max) に変換して、SQL Server 2005 (9.x) を実行しているサブスクライバーに UDT 型の列をレプリケートできるようにします。
0x2000000000 hierarchyid データ型を varbinary(max) に変換し、hierarchyid 型の列を SQL Server 2005 (9.x) を実行しているサブスクライバーにレプリケートできるようにします。 レプリケート テーブルで hierarchyid 列を使用する方法の詳細については、「 hierarchyid データ型メソッドリファレンスを参照してください。
0x4000000000 フィルター処理されたインデックスをテーブルにレプリケートします。 フィルター選択されたインデックスについて詳しくは、「フィルター選択されたインデックスの作成」を参照してください。
0x8000000000 geographyおよび geometry データ型を varbinary(max) に変換して、SQL Server 2005 (9.x) を実行しているサブスクライバーにこれらの型の列をレプリケートできるようにします。
0x10000000000 geography および geometry 型の列にインデックスをレプリケートします。

この値が NULL場合、アーティクルの有効なスキーマ オプションが自動生成されます。 Default スキーマ オプション テーブルには、アーティクルの種類に基づいて選択された値が表示されます。 また、すべての種類のレプリケーションとアーティクルの種類に対して、すべての @schema_option 値が有効なわけではありません。 Valid スキーマ オプション テーブルには、特定のアーティクルの種類に対して指定できるオプションが表示されます。

Note

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

[ @subset_filterclause = ] N'subset_filterclause'

WHERE という単語を含まないテーブル アーティクルの水平方向のフィルター処理を指定する WHERE 句。 @subset_filterclausenvarchar(1000)で、既定値は空の文字列です。

重要

パフォーマンス上の理由から、 LEFT([MyColumn]) = SUSER_SNAME()などのパラメーター化された行フィルター句では、列名に関数を適用しないことをお勧めします。 フィルター句で HOST_NAME を使用し、 HOST_NAME 値をオーバーライドする場合は、 CONVERTを使用してデータ型を変換する必要があります。 この場合のベスト プラクティスの詳細については、「パラメーター化されたフィルター - パラメーター化された行フィルター」の「HOST_NAME() 値のオーバーライド」セクション 参照

[ @article_resolver = ] N'article_resolver'

テーブル アーティクルまたはテーブル アーティクルでカスタム ビジネス ロジックを実行するために呼び出された .NET Framework アセンブリの競合を解決するために使用される COM ベースの競合回避モジュール。 @article_resolvernvarchar(255) で、既定値は NULL です。 このパラメーターで使用できる値は、Microsoft カスタム 競合回避モジュールに記載されています。 指定された値が Microsoft リゾルバーの 1 つでない場合、SQL Server はシステム提供のリゾルバーではなく、指定されたリゾルバーを使用します。 sp_enumcustomresolversを使用して、使用可能なカスタム リゾルバーの一覧を列挙します。 詳細については、「マージ同期中にビジネス ロジックを実行するマージ レプリケーション - 競合の検出と解決を参照してください。

[ @resolver_info = ] N'resolver_info'

カスタム リゾルバーに必要な追加情報を指定するために使用されます。 一部の Microsoft リゾルバーでは、リゾルバーへの入力として列が必要です。 @resolver_infonvarchar(517) で、既定値は NULL です。 詳細については、「 Advanced Merge Replication Conflict - COM ベースの競合回避モジュールを参照してください。

[ @source_owner = ] N'source_owner'

@source_objectの所有者の名前。 @source_ownersysname で、既定値は NULL です。 NULL場合、現在のユーザーは所有者であると見なされます。

[ @destination_owner = ] N'destination_owner'

サブスクリプション データベース内のオブジェクトの所有者 ( dboされていない場合)。 @destination_ownersysname で、既定値は NULL です。 NULL場合、dboは所有者であると見なされます。

[ @vertical_partition = ] N'vertical_partition'

テーブル アーティクルの列フィルター処理を有効または無効にします。 @vertical_partitionnvarchar(5) で、既定値は false です。

  • false は、垂直フィルター処理がないことを示し、すべての列を発行します。

  • false は、宣言された主キーと ROWGUID 列を除くすべての列をクリアします。 列は、 sp_mergearticlecolumnを使用して追加されます。

[ @auto_identity_range = ] N'auto_identity_range'

パブリケーションの作成時に、このテーブルアーティクルの ID 範囲の自動処理を有効または無効にします。 @auto_identity_rangenvarchar(5) で、既定値は NULL です。 false では ID 範囲の自動処理が有効になりますが、 false では無効になります。

Note

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 ID 範囲管理オプションを指定するには、 @identityrangemanagementoption を使用する必要があります。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。

[ @pub_identity_range = ] pub_identity_range

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

[ @identity_range = ] identity_range

自動 ID 範囲管理を使用する場合にパブリッシャーとサブスクライバーの両方に割り当てられる ID 範囲サイズを制御します。 @identity_rangebigint で、既定値は NULL です。 @identityrangemanagementoptionauto場合、または@auto_identity_rangefalse場合は、このパラメーターを指定する必要があります。

Note

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

[ @threshold = ] しきい値

マージ エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージ値です。 @thresholdで指定された値の割合を使用すると、マージ エージェントによって新しい ID 範囲が作成されます。 @thresholdint で、既定値は NULL です。 @identityrangemanagementoptionauto場合、または@auto_identity_rangefalse場合は、このパラメーターを指定する必要があります。

[ @verify_resolver_signature = ] verify_resolver_signature

マージ レプリケーションでリゾルバーを使用する前にデジタル署名を検証するかどうかを指定します。 @verify_resolver_signatureint で、既定値は 1 です。

  • 0 は、署名が検証されていないことを指定します。

  • 1 は、署名が信頼できるソースからの署名であるかどうかを確認することを指定します。

[ @destination_object = ] N'destination_object'

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

[ @allow_interactive_resolver = ] N'allow_interactive_resolver'

アーティクルでの対話型リゾルバーの使用を有効または無効にします。 @allow_interactive_resolvernvarchar(5) で、既定値は false です。 false は、記事で対話型リゾルバーを使用できるようにします。 false は無効にします。

Note

対話型リゾルバーは、SQL Server Compact サブスクライバーではサポートされていません。

[ @fast_multicol_updateproc = ] N'fast_multicol_updateproc'

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。

[ @check_permissions = ] check_permissions

マージ エージェントがパブリッシャーに変更を適用したときに検証されるテーブル レベルのアクセス許可のビットマップ。 マージ プロセスで使用されるパブリッシャー ログイン/ユーザー アカウントに適切なテーブル権限がない場合、無効な変更は競合としてログに記録されます。 @check_permissionsintであり、 にすることができます|(ビットごとの OR) 次の値の 1 つ以上の積。

Value 説明
0x00 (既定値) アクセス許可はチェックされません。
0x10 サブスクライバーで行われた挿入操作をアップロードする前に、パブリッシャーのアクセス許可を確認します。
0x20 サブスクライバーで行われた更新操作をアップロードする前に、パブリッシャーのアクセス許可を確認します。
0x40 サブスクライバーで行われた削除操作をアップロードする前に、パブリッシャーのアクセス許可を確認します。

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

このストアド プロシージャによって実行されたアクションによって、既存のスナップショットが無効になる可能性があることを確認します。 @force_invalidate_snapshotビットで、既定値は 0 です。

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

  • 1 は、アーティクルを追加するとスナップショットが無効になる可能性があり、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットを古いスナップショットとしてマークし、新しいスナップショットを生成するためのアクセス許可を付与します。 @force_invalidate_snapshot は、既存のスナップショットを持つパブリケーションにアーティクルを追加するときに 1 に設定されます。

[ @published_in_tran_pub = ] N'published_in_tran_pub'

マージ パブリケーション内のアーティクルがトランザクション パブリケーションにもパブリッシュされることを示します。 @published_in_tran_pubnvarchar(5) で、既定値は false です。 false は、アーティクルがトランザクション パブリケーションにもパブリッシュされることを指定します。

[ @force_reinit_subscription = ] force_reinit_subscription

このストアド プロシージャによって実行されるアクションで、既存のサブスクリプションの再初期化が必要になる可能性があることを確認します。 @force_reinit_subscriptionbit で、既定値は 0 です。

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

  • 1 は、マージ アーティクルを変更すると、既存のサブスクリプションが再初期化され、サブスクリプションの再初期化が行われるアクセス許可が付与されることを意味します。 パラメーター化された行フィルター@subset_filterclause指定する場合、@force_reinit_subscription1に設定されます。

[ @logical_record_level_conflict_detection = ] N'logical_record_level_conflict_detection'

論理レコードのメンバーであるアーティクルの競合検出レベルを指定します。 @logical_record_level_conflict_detectionnvarchar(5) で、既定値は false です。

  • false は、論理レコード内の任意の場所で変更が行われた場合に競合が検出されることを指定します。

  • false は、 @column_trackingで指定された既定の競合検出が使用されることを指定します。 詳細については、「Group Changes to Related Rows with Logical Records」 (論理レコードによる関連行への変更のグループ化) を参照してください。

Note

論理レコードは SQL Server Compact サブスクライバーではサポートされていないため、これらのサブスクライバーをサポートするには、@logical_record_level_conflict_detectionfalse の値を指定する必要があります。

[ @logical_record_level_conflict_resolution = ] N'logical_record_level_conflict_resolution'

論理レコードのメンバーであるアーティクルの競合解決レベルを指定します。 @logical_record_level_conflict_resolutionnvarchar(5) で、既定値は false です。

  • false は、優先論理レコード全体が、失われる論理レコードを上書きすることを指定します。

  • false は、勝つ行が論理レコードに制約されないように指定します。

@logical_record_level_conflict_detectionfalseされている場合は、@logical_record_level_conflict_resolutionfalse に設定する必要があります。 詳細については、「Group Changes to Related Rows with Logical Records」 (論理レコードによる関連行への変更のグループ化) を参照してください。

Note

論理レコードは SQL Server Compact サブスクライバーではサポートされていないため、これらのサブスクライバーをサポートするには、@logical_record_level_conflict_resolutionfalse の値を指定する必要があります。

[ @partition_options = ] partition_options

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

Value 説明
0 (既定値) アーティクルのフィルター処理は静的であるか、パーティションごとにデータの一意のサブセット (つまり、"重複する" パーティション) を生成しません。
1 パーティションは重複しており、サブスクライバーで行われたデータ操作言語 (DML) の更新では、行が属するパーティションを変更できません。
2 アーティクルのフィルター処理では重複しないパーティションが生成されますが、複数のサブスクライバーが同じパーティションを受け取ることができます。
3 この記事のフィルター処理により、サブスクリプションごとに一意の重複しないパーティションが生成されます。

Note

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

[ @processing_order = ] processing_order

マージ パブリケーション内のアーティクルの処理順序を示します。 @processing_orderint で、既定値は 0 です。 0 はアーティクルが順序付けされていないことを指定し、その他の値は、このアーティクルの処理順序の序数値を表します。 アーティクルは、最も小さい値から最も大きい値の順序で処理されます。 2 つのアーティクルの値が同じ場合、処理順序は、 sysmergearticles システム テーブル内のアーティクルニックネームの順序によって決まります。 詳細については、「Specify Merge Replication properties」 (マージ レプリケーションのプロパティの指定) を参照してください。

[ @subscriber_upload_options = ] subscriber_upload_options

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

Value 説明
0 (既定値) 制限なし。 サブスクライバー側で行われた変更は、パブリッシャーにアップロードされます。
1 変更はサブスクライバーで許可されますが、パブリッシャーにはアップロードされません。
2 サブスクライバーで変更を行うことはできません。

@subscriber_upload_optionsを変更するには、sp_reinitmergepullsubscriptionを呼び出してサブスクリプションを再初期化する必要があります。

Note

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

[ @identityrangemanagementoption = ] N'identityrangemanagementoption'

アーティクルの ID 範囲管理の処理方法を指定します。 @identityrangemanagementoptionnvarchar(10)であり、次のいずれかの値を指定できます。

Value 説明
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 の値は無視されます。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。

[ @delete_tracking = ] N'delete_tracking'

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

重要

@delete_trackingfalseに設定すると、非収束になります。 アーティクルのソース テーブルが既に別のパブリケーションに発行されている場合、 @delete_tracking の値は両方のアーティクルで同じである必要があります。

Note

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

[ @compensate_for_errors = ] N'compensate_for_errors'

同期中にエラーが検出されたときに補正アクションが行われるかどうかを示します。 @compensate_for_errorsnvarchar(5) で、既定値は false です。 trueに設定すると、同期中にサブスクライバーまたはパブリッシャーで適用できない変更は、常に変更を元に戻すための補正アクションにつながります。ただし、誤って構成されたサブスクライバーでエラーが発生すると、他のサブスクライバーとパブリッシャーの変更が元に戻される可能性があります。 false は、これらの補正アクションを無効にしますが、エラーは補正と同様にログに記録され、後続のマージは成功するまで変更の適用を試み続けます。

重要

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

[ @stream_blob_columns = ] N'stream_blob_columns'

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

重要

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

Note

論理レコードなどの特定のマージ レプリケーション機能では、 @stream_blob_columnstrue に設定されている場合でも、バイナリ ラージ オブジェクトをレプリケートするときにストリームの最適化が使用されないようにすることができます。

リターン コードの値

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

解説

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

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

@partition_options3 の値を指定する場合:

  • その記事のデータパーティションごとに 1 つのサブスクリプションしか存在できません。 第 2 のサブスクリプションを作成し、その新しいサブスクリプションのフィルター選択条件が既存のサブスクリプションと同じパーティションとして判別される場合、既存のサブスクリプションは削除されます。

  • メタデータは、マージ エージェントが実行され、パーティション 分割されたスナップショットの有効期限がより早く切れるたびにクリーンアップされます。 このオプションを使用する場合は、サブスクライバーが要求したパーティション スナップショットを有効にすることを検討する必要があります。 詳しくは、「 パラメーター化されたフィルターを使用したパブリケーションのスナップショットの作成」をご覧ください。

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

@processing_orderを指定する場合は、アーティクルの注文値の間にギャップを残すことをお勧めします。これにより、将来新しい値を簡単に設定できるようになります。 たとえば、Article1Article2Article3の 3 つの記事がある場合は、123ではなく、@processing_order1020、および30に設定します。 詳細については、「Specify Merge Replication properties」 (マージ レプリケーションのプロパティの指定) を参照してください。

既定のスキーマ オプション テーブル

次の表では、@schema_optionNULL値が指定されている場合、ストアド プロシージャが設定する既定値について説明します。これはアーティクルの種類によって異なります。

記事の種類 スキーマ オプションの値
func schema only 0x01
indexed view schema only 0x01
proc schema only 0x01
table 0x0C034FD1 - SQL Server 2005 (9.x) 以降の互換性のあるパブリケーションとネイティブ モードのスナップショット。

0x08034FF1 - SQL Server 2005 (9.x) 以降の互換性のあるパブリケーションと文字モード スナップショット。
view schema only 0x01

Note

パブリケーションで以前のバージョンの 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 固定データベース ロールのメンバーシップが必要です。