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'

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

[ @article = ] N'article'

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

[ @property = ] N'property'

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

[ @value = ] N'value'

対象となるプロパティの新しい値を指定します。 @valueは nvarchar(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 ステートメントはレプリケートされません。

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

注: 値 3 を指定 partition_optionsする場合、その記事のデータパーティションごとに 1 つのサブスクリプションしか存在できません。 新しいサブスクリプションのフィルター条件が既存のサブスクリプションと同じパーティションに解決される 2 つ目のサブスクリプションが作成されると、既存のサブスクリプションは削除されます。
pre_creation_command none テーブルがサブスクライバーに既に存在する場合、アクションは実行されません。
delete サブセット フィルターの WHERE 句に基づいて削除を発行します。
drop テーブルを再作成する前に削除します。
truncate コピー先テーブルを切り捨てます。
processing_order int : マージ パブリケーション内のアーティクルの処理順序を示します。
pub_identity_range アーティクルが設定またはauto_identity_range設定されている場合identityrangemanagementoptionに、サーバー サブスクリプションを持つサブスクライバーに割り当てられる範囲サイズを指定する trueauto bigint。 この ID 範囲は、再パブリッシュ元のサブスクライバーが自らのサブスクライバーに割り当てるために予約されています。 テーブル アーティクルにのみ適用されます。 詳細については、「レプリケート ID 列」の「マージ レプリケーション」セクション を参照してください
published_in_tran_pub true アーティクルはトランザクション パブリケーションにも発行されます。
false アーティクルはトランザクション パブリケーションにも発行されません。
resolver_info カスタム リゾルバーに必要な追加情報を指定するために使用されます。 一部の Microsoft リゾルバーでは、リゾルバーへの入力として列が必要です。 resolver_infonvarchar(255) で、既定値は NULL. 詳細については、「高度なマージ レプリケーションの競合 - 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 varbinary(max) 列で FILESTREAM 属性が指定されている場合は、このオプションを使用して 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 システムは、記事の有効なスキーマ オプションを自動生成します。
status active テーブルを発行する初期処理スクリプトが実行されます。
unsynced テーブルを発行する初期処理スクリプトは、次回スナップショット エージェントが実行されるときに実行されます。
stream_blob_columns true バイナリ ラージ オブジェクトの列をレプリケートするときに、データ ストリームの最適化が使用されます。 ただし、論理レコードなどの特定のマージ レプリケーション機能では、ストリームの最適化が使用されない可能性があります。 stream_blob_columns FILESTREAM が有効な場合は true に設定されます。 これにより、FILESTREAM データのレプリケーションが最適に実行され、メモリ使用率が低下します。 FILESTREAM テーブルアーティクルで BLOB ストリーミングを使用しないようにするには、false に設定 stream_blob_columns します。

重要: このメモリ最適化を有効にすると、同期中にマージ エージェントのパフォーマンスが低下する可能性があります。 このオプションは、メガバイト単位のデータを含む列をレプリケートする場合にのみ使用してください。
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 範囲が作成されます。 に設定されている場合、またはauto_identity_range設定autoされている場合identityrangemanagementoptiontrue使用されます。 テーブル アーティクルにのみ適用されます。 詳細については、「レプリケート ID 列」の「マージ レプリケーション」セクション を参照してください
verify_resolver_signature 1 カスタム リゾルバーのデジタル署名が検証され、信頼できるソースからの署名であるかどうかを判断します。
0 カスタム リゾルバーのデジタル署名は、信頼できるソースからの署名かどうかを判断するために検証されません。
NULL (既定) @propertyでサポートされている値の一覧を返します。

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

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

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

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

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

[ @force_reinit_subscription = ] force_reinit_subscription

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

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

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

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

リターン コードの値

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

解説

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

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

次のプロパティを変更するには、新しいスナップショットが生成される必要があり、@force_invalidate_スナップショット パラメーターの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

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

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

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

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

schema_optionを変更すると、システムはビットごとの更新を実行しません。 つまり、使用をsp_changemergearticle設定schema_optionすると、既存のビット設定がオフになる可能性があります。 既存の設定を保持するには、設定する値と現在の値の間で > (ビットごとの AND) を実行する必要があります。この値schema_optionは、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できます。