sp_changemergearticle (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン)

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

トピック リンク アイコン Transact-SQL 構文表記規則

構文

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

引数

[ @publication = ] 'publication' 記事が存在するパブリケーションの名前を指定します。 publication は sysname で、既定値はありません。

[ @article = ] 'article' 変更する記事の名前を指定します。 articlesysname で、 既定値はありません。

[ @property = ] 'property' 指定した記事とパブリケーションに対して変更するプロパティを指定します。 プロパティnvarchar(30) であり、表に示されている値の 1 つを指定できます。

[ @value = ] 'value' 指定したプロパティの新しい値を指定します。 valuenvarchar(1000) で、テーブルにリストされている値の 1 つを指定できます。

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

プロパティ 説明
allow_interactive_resolver true アーティクルに対してインタラクティブ競合回避モジュールの使用を有効にします。
false 記事の対話型競合回避機能の使用を無効にします。
article_resolver 記事のカスタム リゾルバー。 テーブル の記事にのみ適用されます。
check_permissions (ビットマップ) 0x00 テーブルレベルの権限は確認されません。
0x10 サブスクライバーで実行された INSERT ステートメントをパブリッシャーで適用する前に、テーブルレベルの権限がパブリッシャーで確認されます。
0x20 テーブル レベルのアクセス許可は、サブスクライバーで行Publisher UPDATE ステートメントがアプリケーションで適用される前に、Publisher。
0x40 テーブル レベルのアクセス許可は、サブスクライバー Publisher DELETE ステートメントがテーブルレベルで適用される前に、Publisher。
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_tracking false に設定 すると、非収束が発生し、削除された行を手動で削除する必要があります。
description 記事の説明的なエントリ。
destination_owner dbo ではない場合は、サブスクリプション データベース内のオブジェクトの所有者 の名前
identity_range 記事に identityrangemanagementoptionauto に設定されている場合、または true に設定されている場合に、新しい ID 値を割り当てるときに使用する範囲サイズを auto_identity_range する bigint。 テーブル の記事にのみ適用されます。 詳細については、「ID 列のレプリケート」の「マージ レプリケーション 」セクションを参照してください
identityrangemanagementoption 手動 自動での ID 範囲の管理を無効にします。 NOT FOR REPLICATION を使用して ID 列をマークし、ID 範囲の手動処理を有効にします。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。
"なし" すべての ID 範囲の管理を無効にします。
logical_record_level_conflict_detection true 論理レコード内の任意の場所で変更が行われた場合、競合が検出されます。 この値 logical_record_level_conflict_resolution true に設定する必要 があります
false 既定の競合検出は、 の指定に 基column_tracking。
logical_record_level_conflict_resolution true 論理レコード全体が、失った論理レコードを上書きします。
false 選択した行は論理レコードに制限されません。
Partition_options 0 記事のフィルター処理は静的か、パーティションごとにデータの一意のサブセット (つまり、"重複する" パーティション) を生成しません。
1 パーティションは重複しています。サブスクライバーで実行された DML 更新では、行が属するパーティションを変更できません。
2 この記事のフィルター処理では重複しないパーティションが生成されますが、複数のサブスクライバーは同じパーティションを受け取る可能性があります。
3 この記事のフィルター処理では、サブスクリプションごとに一意の重複しないパーティションが生成されます。

注: partition_options に値 3 を指定した場合、その記事のデータパーティションごとに 1 つのサブスクリプションのみを使用できます。 第 2 のサブスクリプションを作成し、その新しいサブスクリプションのフィルター選択条件が既存のサブスクリプションと同じパーティションとして判別される場合、既存のサブスクリプションは削除されます。
pre_creation_command "なし" テーブルがサブスクライバーに既に存在する場合、アクションは実行されません。
delete サブセットフィルターの WHERE 句に基づいて削除を発行します。
テーブルを再作成する前に削除します。
truncate 変換先テーブルを切り捨てます。
processing_order マージパブリケーション内のアーティクルの処理順序を示す int です。
pub_identity_range アーティクルの identityrangemanagementoptionauto に設定されている場合、または auto_identity_rangetrue に設定されている場合に、サーバーサブスクリプションを使用してサブスクライバーに割り当てられた範囲のサイズを指定する bigint です。 この ID 範囲は、再パブリッシュ元のサブスクライバーが自らのサブスクライバーに割り当てるために予約されています。 テーブルアーティクルにのみ適用されます。 詳細については、「 Id 列のレプリケート」の「マージレプリケーション」セクションを参照してください。
published_in_tran_pub true アーティクルはトランザクションパブリケーションでもパブリッシュされます。
false アーティクルはトランザクション パブリケーションではパブリッシュされません。
resolver_info は、カスタム競合回避モジュールに必要な追加情報を指定するために使用されます。 一部の Microsoft 競合回避モジュールには、入力として指定された列が必要です。 resolver_infonvarchar (255),、既定値は NULL です。 詳細については、「 Microsoft COM ベースの競合回避モジュール」を参照してください。
schema_option (ビットマップ) 詳細については、このトピックで後述する「解説」を参照してください。
0x00 スナップショットエージェントによるスクリプト作成を無効にし、 creation_script で提供されているスクリプトを使用します。
0x01 オブジェクト作成スクリプト (CREATE TABLE、CREATE PROCEDURE など) を生成します。
0x10 対応するクラスター化インデックスを生成します。
0x20 サブスクライバーでユーザー定義データ型を基本データ型に変換します。 UDT 列が主キーの一部である場合、または計算列が UDT 列を参照している場合は、ユーザー定義型 (UDT) 列に CHECK 制約または DEFAULT 制約がある場合は、このオプションを使用できません。
0x40 対応する非クラスター化インデックスを生成します。
0x80 宣言された参照整合性を主キーに含めます。
0x100 定義されている場合、テーブル アーティクル上のユーザー トリガーをレプリケートします。
0x200 FOREIGN KEY 制約をレプリケートします。 参照先のテーブルがパブリケーションの一部でない場合、パブリッシュされたテーブルのすべての FOREIGN KEY 制約はレプリケートされません。
0x400 CHECK 制約をレプリケートします。
0x800 既定値をレプリケートします。
0x1000 列レベルの照合順序をレプリケートします。
0x2000 パブリッシュされたアーティクルのソースオブジェクトに関連付けられた拡張プロパティをレプリケートします。
0x4000 テーブルアーティクルで定義されている場合は、一意キーをレプリケートします。
0x8000 制約のスクリプトを作成するときに、ALTER TABLE ステートメントを生成します。
0x10000 CHECK 制約を NOT FOR REPLICATION としてレプリケートし、同期中に制約が適用されないようにします。
0x20000 では、制約が同期中に適用されないように、外部キー制約は NOT FOR REPLICATION としてレプリケートされます。
0x40000 パーティション テーブルまたはインデックスに関連付けられているファイル グループをレプリケートします。
0x80000 パーティション テーブルのパーティション構成をレプリケートします。
0x100000 パーティションインデックスのパーティション構成をレプリケートします。
0x200000 テーブルの統計をレプリケートします。
0x400000 既定のバインドをレプリケートします
0x800000 ルールのバインドをレプリケートします
0x1000000 フルテキスト インデックスをレプリケートします。
0x2000000 Xml 列にバインドされている xml スキーマコレクションはレプリケートされません。
0x4000000 Xml 列のインデックスをレプリケートします。
0x8000000 サブスクライバーにまだ存在しないスキーマを作成します。
0x10000000 サブスクライバーで xml 列を ntext に変換します。
0x20000000 で導入されたラージオブジェクトデータ型 (nvarchar (max)varchar (max)、 varbinary (max)) SQL Server 2005 (9.x) を、でサポートされているデータ型に変換 SQL Server 2000 (8.x) します。
0x40000000 権限をレプリケートします。
0x80000000 パブリケーションに含まれていないオブジェクトへの依存関係を削除しようとしています。
0x100000000 このオプションを使用すると、 varbinary (max) 列に FILESTREAM 属性が指定されている場合に、その属性をレプリケートできます。 テーブルをサブスクライバーにレプリケートする場合は、このオプションを指定しないでください SQL Server 2005 (9.x) 。 このスキーマオプションを設定する方法に関係なく、FILESTREAM 列を持つテーブルをサブスクライバーにレプリケートすること SQL Server 2000 (8.x) はサポートされていません。 関連オプション 0x800000000 を参照してください。
0x200000000 で導入された日付と時刻のデータ型 (datetimedatetimeoffset、および datetime2) SQL Server 2008 を、以前のバージョンのでサポートされているデータ型に変換し SQL Server ます。
0x400000000 データとインデックスの圧縮オプションをレプリケートします。 詳細については、「 Data Compression」を参照してください。
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 (Transact-SQL)」を参照してください
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 クライアント サブスクリプションを持つサブスクライバーで行われた更新プログラムに制限はありません。変更は、Publisher にアップロードされます。 このプロパティを変更するには、既存のサブスクライバーを再初期化する必要があります。
1 変更は、クライアント サブスクリプションを持つサブスクライバーで許可されますが、クライアント サブスクリプションにアップロードPublisher。
2 変更は、クライアント サブスクリプションを持つサブスクライバーでは許可されません。
subset_filterclause 水平方向のフィルター処理を指定する WHERE 句。 テーブル の記事にのみ適用されます。

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

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

0 は、マージ 記事に対する変更によってスナップショットが無効になるのを示します。 変更に新しいスナップショットが必要な変更がストアド プロシージャによって検出された場合、エラーが発生し、変更は行われません。

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

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

[ @force_reinit_subscription = ] force_reinit_subscription このストアド プロシージャによって実行されるアクションで、既存のサブスクリプションを再初期化する必要がある場合があります。 force_reinit_subscription ビット です。 既定値は 0 です

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

1 は、マージ 記事を変更すると、既存のサブスクリプションが再初期化され、サブスクリプションの再初期化のアクセス許可が付与されます。

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

リターン コードの値

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

Remarks

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

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

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

  • check_permissions

  • column_tracking

  • destination_owner

  • pre_creation_command

  • schema_options

  • subset_filterclause

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

  • 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_options に値 3 を指定すると 、マージ エージェント が実行され、パーティション スナップショットの有効期限が速く切れるたびにメタデータがクリーンアップされます。 このオプションを使用する場合は、サブスクライバーによって要求されたパーティションスナップショットを有効にすることを検討してください。 詳しくは、「 Snapshots for Merge Publications with Parameterized Filters」をご覧ください。

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

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

マージ処理が使用するパブリッシャーのログインまたはユーザー アカウントが正しいテーブル権限を持っていない場合、無効な変更は競合としてログに記録されます。

Schema_option の値を変更しても、ビットごとの更新は実行されません。 つまり、 sp_changemergearticle を使用して schema_option を設定すると、既存のビット設定が無効になる場合があります。 既存の設定を保持するには、設定する値と schema_option の現在の値の間で & (ビットごとの and)を実行する必要があります。これは sp_helpmergearticleを実行することで決定できます。

注意事項

1つのパブリケーションに多く (数百) の記事があり、いずれかの記事に対して sp_changemergearticle を実行すると、実行が完了するまでに時間がかかることがあります。

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

次の表では、アーティクルの種類に応じて許可される schema_option 値について説明します。

記事の種類 スキーマオプションの値
func スキーマのみ 0x010x2000
インデックス付きビュースキーマのみ 0x010x040,0x01000x20000x400000x1000000、および 0x200000
proc スキーマのみ 0x010x2000
テーブル すべてのオプション。
view schema only 0x010x040,0x01000x20000x400000x1000000、および 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 [AdventureWorks2012]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

アクセス許可

Sp_changemergearticle を実行できるのは、固定サーバーロール sysadmin または固定データベースロール db_owner のメンバーだけです。

参照

アーティクルのプロパティの表示および変更
パブリケーションとアーティクルのプロパティの変更
sp_addmergearticle (transact-sql SQL)
sp_dropmergearticle (Transact-SQL)
sp_helpmergearticle (Transact-SQL)
レプリケーション ストアド プロシージャ (Transact-SQL)