sp_addmergearticle (Transact-SQL)

適用対象: SQL ServerAzure 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'

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

[ @article = ] N'article'

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

[ @source_object = ] N'source_object'

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

[ @type = ] N'type'

アーティクルの種類。 @typeは sysname で、既定値はtable次のいずれかの値になります。

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

[ @description = ] N'description'

記事の説明。 @descriptionは nvarchar(255) で、既定値は NULL.

[ @column_tracking = ] N'column_tracking'

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

Note

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

[ @status = ] N'status'

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

[ @pre_creation_cmd = ] N'pre_creation_cmd'

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

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

[ @creation_script = ] N'creation_script'

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

Note

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

[ @schema_option = ] schema_option

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

説明
0x00 スナップショット エージェントによるスクリプト作成を無効にし、@creation_script定義されている指定されたスキーマ事前作成スクリプトを使用します。
0x01 オブジェクトの作成 (CREATE TABLEなど CREATE 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 varbinary(max) 列でFILESTREAM属性が指定されている場合は、このオプションを使用して属性をレプリケートします。 SQL Server 2005 (9.x) サブスクライバーにテーブルをレプリケートする場合は、このオプションを指定しないでください。 FILESTREAM 列を持つテーブルを SQL Server 2000 (8.x) サブスクライバーにレプリケートすることは、このスキーマ オプションの設定方法に関係なくサポートされていません。 関連するオプション 0x800000000を参照してください。
0x200000000 SQL Server 2008 (10.0.x) で導入された日付と時刻のデータ型 (日付時刻、datetimeoffset、datetime2) を、以前のバージョンの SQL Server でサポートされているデータ型に変換します。
0x400000000 データとインデックスの圧縮オプションをレプリケートします。 詳細については、「データ圧縮」を参照してください
0x800000000 このオプションを設定すると、サブスクライバーの独自のファイル グループに FILESTREAM データを格納できます。 このオプションが設定されていない場合、FILESTREAM データは既定のファイル グループに格納されます。 レプリケーションではファイル グループは作成されません。そのため、このオプションを設定する場合は、サブスクライバーでスナップショットを適用する前に、ファイル グループを作成する必要があります。 スナップショットを適用する前にオブジェクトを作成する方法の詳細については、「スナップショットが適用される前と後にスクリプトを実行する」を参照してください

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

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

Note

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

[ @subset_filterclause = ] N'subset_filterclause'

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

重要

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

[ @article_resolver = ] N'article_resolver'

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

[ @resolver_info = ] N'resolver_info'

カスタム リゾルバーに必要な追加情報を指定するために使用されます。 一部の Microsoft リゾルバーでは、リゾルバーへの入力として列が必要です。 @resolver_infoは nvarchar(517) で、既定値は NULL. 詳細については、「高度なマージ レプリケーションの競合 - COM ベースの競合回避モジュール」を参照してください

[ @source_owner = ] N'source_owner'

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

[ @destination_owner = ] N'destination_owner'

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

[ @vertical_partition = ] N'vertical_partition'

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

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

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

[ @auto_identity_range = ] N'auto_identity_range'

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

Note

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

[ @pub_identity_range = ] pub_identity_range

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

[ @identity_range = ] identity_range

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

Note

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

[ @threshold = ] しきい値

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

[ @verify_resolver_signature = ] verify_resolver_signature

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

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

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

[ @destination_object = ] N'destination_object'

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

[ @allow_interactive_resolver = ] N'allow_interactive_resolver'

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

Note

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

[ @fast_multicol_updateproc = ] N'fast_multicol_updateproc'

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

[ @check_permissions = ] チェック_permissions

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

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

[ @force_invalidate_snapshot = ] force_invalidate_スナップショット

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

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

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

[ @published_in_tran_pub = ] N'published_in_tran_pub'

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

[ @force_reinit_subscription = ] force_reinit_subscription

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

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

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

[ @logical_record_level_conflict_detection = ] N'logical_record_level_conflict_detection'

論理レコードのメンバーであるアーティクルの競合検出レベルを指定します。 @logical_record_level_conflict_detectionは nvarchar(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_resolutionは nvarchar(5) で、既定値は false.

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

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

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

Note

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

[ @partition_options = ] partition_options

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

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

Note

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

[ @processing_order = ] processing_order

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

[ @subscriber_upload_options = ] subscriber_upload_options

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

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

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

Note

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

[ @identityrangemanagementoption = ] N'identityrangemanagementoption'

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

説明
none ID 範囲の管理を無効にします。
manual NOT FOR REPLICATION を使用して ID 列をマークし、手動での ID 範囲の処理を有効にします。
auto ID 範囲の自動管理を指定します。
NULL (既定) 既定値はnone、@auto_identity_range値がそうでないtrue場合です。

下位互換性のために、@identityrangemanagementoptionの値が指定されている場合、NULL@auto_identity_range値がチェックされます。 ただし、@identityrangemanagementoptionの値がないNULL場合、@auto_identity_range値は無視されます。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。

[ @delete_tracking = ] N'delete_tracking'

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

重要

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

Note

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

[ @compensate_for_errors = ] N'compensate_for_errors'

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

重要

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

[ @stream_blob_columns = ] N'stream_blob_columns'

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

重要

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

Note

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

リターン コードの値

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

解説

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

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

@partition_options3値を指定する場合:

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

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

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

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

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

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

記事の種類 スキーマ オプションの値
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 がサポートされている場合、既定のスキーマ オプション table0x30034FF1.

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

次の表では、アーティクルの種類に応じて@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 固定データベース ロールのメンバーシップが必要です。