次の方法で共有


sp_changemergearticle (Transact-SQL)

適用対象: SQL Server

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

Transact-SQL 構文表記規則

構文

sp_changemergearticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]

引数

[ @publication = ] N'publication'

アーティクルが存在するパブリケーションの名前。 @publicationsysname で、既定値はありません。

[ @article = ] N'article'

変更するアーティクルの名前。 @articlesysname で、既定値はありません。

[ @property = ] N'property'

指定されたアーティクルとパブリケーションに対して変更するプロパティ。 @propertysysname であり、次の表に示す値のいずれかを指定できます。

[ @value = ] N'value'

対象となるプロパティの新しい値を指定します。 @valuenvarchar(2000)であり、次の表に示す値のいずれかを指定できます。

次の表では、アーティクルのプロパティとそれらのプロパティの値について説明します。

プロパティ 説明
allow_interactive_resolver true アーティクルに対してインタラクティブ競合回避モジュールの使用を有効にします。
false 記事の対話型リゾルバーの使用を無効にします。
article_resolver 記事のカスタム 競合回避モジュール。 テーブル アーティクルにのみ適用されます。
check_permissions (ビットマップ) 0x00 テーブル レベルのアクセス許可はチェックされません。
0x10 サブスクライバーで実行された INSERT ステートメントをパブリッシャーで適用する前に、テーブルレベルの権限がパブリッシャーで確認されます。
0x20 サブスクライバーで行われた UPDATE ステートメントがパブリッシャーで適用される前に、テーブル レベルのアクセス許可がパブリッシャーでチェックされます。
0x40 サブスクライバーの DELETE ステートメントがパブリッシャーで適用される前に、テーブル レベルのアクセス許可がパブリッシャーでチェックされます。
column_tracking true 列レベルの追跡を有効にします。 テーブル アーティクルにのみ適用されます。

注: 列レベルの追跡は、246 列を超えるテーブルをパブリッシュする場合は使用できません。
false 列レベルの追跡を無効にし、競合の検出を行レベルのままにします。 テーブル アーティクルにのみ適用されます。
compensate_for_errors true 同期中にエラーが発生したときに、補正操作が実行されます。 詳細については、 sp_addmergearticleを参照してください。
false 補正アクションは実行されません。これが既定の動作です。 詳細については、 sp_addmergearticleを参照してください。

重要: 影響を受ける行のデータは収束しないように見えますが、エラーに対処するとすぐに変更を適用でき、データが収束します。 アーティクルのソース テーブルが既に別のパブリケーションに発行されている場合、 compensate_for_errors の値は両方のアーティクルで同じである必要があります。
creation_script サブスクリプション データベースでアーティクルを作成するために使用するオプションのアーティクル スキーマ スクリプトのパスと名前。
delete_tracking true DELETE ステートメントがレプリケートされます。これは既定の動作です。
false DELETE ステートメントはレプリケートされません。

重要:delete_trackingfalseに設定すると、収束が行われなくなり、削除された行を手動で削除する必要があります。
description 記事の説明的なエントリ。
destination_owner サブスクリプション データベース内のオブジェクトの所有者の名前 ( dboではない場合)。
identity_range アーティクルがautoに設定されている場合、またはauto_identity_rangetrueに設定 identityrangemanagementoptionされている場合に、新しい ID 値を割り当てるときに使用する範囲サイズを指定する bigint。 テーブル アーティクルにのみ適用されます。 詳細については、「 ID 列のレプリケート」の「マージ レプリケーション」セクションを参照してください。
identityrangemanagementoption manual 自動での ID 範囲の管理を無効にします。 NOT FOR REPLICATION を使用して ID 列をマークし、手動での ID 範囲の処理を有効にします。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。
none すべての ID 範囲の管理を無効にします。
logical_record_level_conflict_detection true 論理レコード内の任意の場所に変更が加えられた場合、競合が検出されます。 logical_record_level_conflict_resolutiontrue に設定する必要があります。
false 既定の競合検出は、 column_trackingで指定されているように使用されます。
logical_record_level_conflict_resolution true 勝った論理レコード全体が、失う論理レコードを上書きします。
false 勝つ行は論理レコードに制限されません。
partition_options 0 アーティクルのフィルター処理は静的であるか、パーティションごとにデータの一意のサブセット (つまり、"重複する" パーティション) を生成しません。
1 パーティションは重複しており、サブスクライバーで行われた DML 更新では、行が属するパーティションを変更できません。
2 アーティクルのフィルター処理では重複しないパーティションが生成されますが、複数のサブスクライバーが同じパーティションを受け取ることができます。
3 この記事のフィルター処理により、サブスクリプションごとに一意の重複しないパーティションが生成されます。

注: partition_options3 の値を指定した場合、その記事のデータパーティションごとに 1 つのサブスクリプションしか存在できません。 新しいサブスクリプションのフィルター条件が既存のサブスクリプションと同じパーティションに解決される 2 つ目のサブスクリプションが作成されると、既存のサブスクリプションは削除されます。
pre_creation_command none テーブルがサブスクライバーに既に存在する場合、アクションは実行されません。
delete サブセット フィルターの WHERE 句に基づいて削除を発行します。
drop テーブルを再作成する前に削除します。
truncate コピー先テーブルを切り捨てます。
processing_order マージ パブリケーション内のアーティクルの処理順序を示す int
pub_identity_range アーティクルがautoに設定されている場合、またはauto_identity_rangetrueに設定されている場合に、サーバー サブスクリプションを identityrangemanagementoption持つサブスクライバーに割り当てられる範囲サイズを指定する bigint。 この ID 範囲は、再パブリッシュ元のサブスクライバーが自らのサブスクライバーに割り当てるために予約されています。 テーブル アーティクルにのみ適用されます。 詳細については、「 ID 列のレプリケート」の「マージ レプリケーション」セクションを参照してください。
published_in_tran_pub true アーティクルはトランザクション パブリケーションにも発行されます。
false アーティクルはトランザクション パブリケーションにも発行されません。
resolver_info カスタム リゾルバーに必要な追加情報を指定するために使用されます。 一部の Microsoft リゾルバーでは、リゾルバーへの入力として列が必要です。 resolver_infonvarchar(255) で、既定値は NULL です。 詳細については、「 Advanced Merge Replication Conflict - COM ベースの競合回避モジュールを参照してください。
schema_option (ビットマップ) 詳細については、「解説」を参照してください。
0x00 スナップショット エージェントによるスクリプト作成を無効にし、creation_scriptで提供されているスクリプトを使用します。
0x01 オブジェクト作成スクリプト (CREATE TABLE、CREATE PROCEDURE など) を生成します。
0x10 対応するクラスター化インデックスを生成します。
0x20 ユーザー定義データ型をサブスクライバーの基本データ型に変換します。 このオプションは、ユーザー定義型 (UDT) 列に CHECK 制約または DEFAULT 制約がある場合、UDT 列が主キーの一部である場合、または計算列が UDT 列を参照している場合は使用できません。
0x40 対応する非クラスター化インデックスを生成します。
0x80 宣言された参照整合性を主キーに含めます。
0x100 定義されている場合、テーブル アーティクル上のユーザー トリガーをレプリケートします。
0x200 FOREIGN KEY 制約をレプリケートします。 参照先テーブルがパブリケーションの一部でない場合、パブリッシュされたテーブルに対するすべての FOREIGN KEY 制約はレプリケートされません。
0x400 CHECK 制約をレプリケートします。
0x800 既定値をレプリケートします。
0x1000 列レベルの照合順序をレプリケートします。
0x2000 パブリッシュされたアーティクル ソース オブジェクトに関連付けられている拡張プロパティをレプリケートします。
0x4000 テーブル アーティクルで定義されている場合は、一意のキーをレプリケートします。
0x8000 制約をスクリプト化するときに ALTER TABLE ステートメントを生成します。
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 システムは、記事の有効なスキーマ オプションを自動生成します。
status active テーブルを発行する初期処理スクリプトが実行されます。
unsynced テーブルを発行する初期処理スクリプトは、次回スナップショット エージェントが実行されるときに実行されます。
stream_blob_columns true バイナリ ラージ オブジェクトの列をレプリケートするときに、データ ストリームの最適化が使用されます。 ただし、論理レコードなどの特定のマージ レプリケーション機能では、ストリームの最適化が使用されない可能性があります。 stream_blob_columns FILESTREAM が有効な場合は true に設定されます。 これにより、FILESTREAM データのレプリケーションが最適に実行され、メモリ使用率が低下します。 FILESTREAM テーブルアーティクルで BLOB ストリーミングを使用しないようにするには、 stream_blob_columns を false に設定します。

重要:このメモリ最適化を有効にすると、同期中にマージ エージェントのパフォーマンスが低下する可能性があります。 このオプションは、メガバイト単位のデータを含む列をレプリケートする場合にのみ使用してください。
false バイナリ ラージ オブジェクト列をレプリケートする場合、最適化は使用されません。
subscriber_upload_options 0 クライアント サブスクリプションを使用するサブスクライバーで行われた更新に関する制限はありません。変更がパブリッシャーにアップロードされます。 このプロパティを変更するには、既存のサブスクライバーを再初期化する必要があります。
1 変更は、クライアント サブスクリプションを持つサブスクライバーで許可されますが、パブリッシャーにはアップロードされません。
2 クライアント サブスクリプションを持つサブスクライバーでは、変更は許可されません。
subset_filterclause 水平フィルター処理を指定する WHERE 句。 テーブル アーティクルにのみ適用されます。

重要: パフォーマンス上の理由から、 LEFT([MyColumn]) = SUSER_SNAME()などのパラメーター化された行フィルター句の列名には関数を適用しないことをお勧めします。 フィルター句で HOST_NAME を使用し、HOST_NAME値をオーバーライドする場合は、 CONVERTを使用してデータ型を変換する必要があります。 この場合のベスト プラクティスの詳細については、「パラメーター化されたフィルター - パラメーター化された行フィルター」の「HOST_NAME() 値のオーバーライド」セクション 参照
threshold SQL Server Compact 以前のバージョンの SQL Server を実行しているサブスクライバーに使用されるパーセンテージ値。 thresholdは、マージ エージェントが新しい ID 範囲を割り当てるタイミングを制御します。 しきい値で指定された値の割合を使用すると、マージ エージェントによって新しい ID 範囲が作成されます。 identityrangemanagementoptionauto に設定されている場合、またはauto_identity_rangetrue に設定されている場合に使用されます。 テーブル アーティクルにのみ適用されます。 詳細については、「 ID 列のレプリケート」の「マージ レプリケーション」セクションを参照してください。
verify_resolver_signature 1 カスタム リゾルバーのデジタル署名が検証され、信頼できるソースからの署名であるかどうかを判断します。
0 カスタム リゾルバーのデジタル署名は、信頼できるソースからの署名かどうかを判断するために検証されません。
NULL (既定) @propertyでサポートされている値の一覧を返します。

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

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

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

  • 1 は、マージ アーティクルを変更するとスナップショットが無効になる可能性があり、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットを古いスナップショットとしてマークし、新しいスナップショットを生成するためのアクセス許可を付与します。

変更時に新しいスナップショットの生成が必要なプロパティについては、「 Remarks 」セクションを参照してください。

[ @force_reinit_subscription = ] force_reinit_subscription

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

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

  • 1 は、マージ アーティクルを変更すると、既存のサブスクリプションが再初期化され、サブスクリプションの再初期化が行われるアクセス許可が付与されることを意味します。

変更時に既存のすべてのサブスクリプションを再初期化する必要があるプロパティについては、「 Remarks 」セクションを参照してください。

リターン コードの値

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

解説

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

sp_changemergearticleは、sp_addmergearticleを使用して最初に指定されたアーティクルプロパティを変更するために使用されるため、これらのプロパティの詳細については、sp_addmergearticleを参照してください。

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

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • schema_options
  • subset_filterclause

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

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • identityrangemanagementoption
  • subscriber_upload_options
  • subset_filterclause
  • creation_script
  • schema_option
  • logical_record_level_conflict_detection
  • logical_record_level_conflict_resolution

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

column_tracking プロパティを設定するときに、テーブルが既に他のマージ パブリケーションでパブリッシュされている場合、列の追跡は、このテーブルに基づく既存のアーティクルで使用されている値と同じである必要があります。 このパラメーターは、テーブル アーティクルのみに固有のものです。

複数のパブリケーションが同じ基になるテーブルに基づいてアーティクルを発行する場合、1 つのアーティクルに対して delete_tracking プロパティまたは compensate_for_errors プロパティを変更すると、同じテーブルに基づく他のアーティクルに対して同じ変更が行われます。

マージ プロセスで使用されるパブリッシャー ログイン/ユーザー アカウントに適切なテーブル権限がない場合、無効な変更は競合としてログに記録されます。

schema_optionの値を変更しても、システムはビットごとの更新を実行しません。 つまり、sp_changemergearticleを使用してschema_optionを設定すると、既存のビット設定がオフになる可能性があります。 既存の設定を保持するには、設定する値とschema_optionの現在の値の間で& (ビットごとの AND) を実行する必要があります。これは、sp_helpmergearticleの実行によって決定できます。

注意事項

パブリケーションに多数の (おそらく数百の) 記事があり、いずれかのアーティクルに対して sp_changemergearticle を実行する場合、実行が完了するまでに時間がかかる場合があります。

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

次の表では、アーティクルの種類に応じて、許可される 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 @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

アクセス許可

sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_changemergearticleを実行できます。