sp_changearticle (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

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

引数

[ @publication = ] 'publication' アーティクルを含むパブリケーションの名前を指定します。 publicationsysname で、既定値は NULL です。

[ @article = ] 'article' プロパティを変更するアーティクルの名前を指定します。 articlesysname で、既定値は NULL です。

[ @property = ] 'property' 変更するアーティクル プロパティです。 property is nvarchar(100).

[ @value = ] 'value' アーティクル プロパティの新しい値です。 nvarchar(255)です

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

プロパティ 説明
creation_script ターゲット テーブルの作成に使用するアーティクル スキーマ スクリプトのパスと名前。 の既定値は NULL です。
del_cmd 実行する DELETE ステートメントです。指定しないと、ログから作成されます。
説明 記事の新しい説明エントリ。
dest_object これは旧バージョンとの互換性のために用意されています。 dest_tableを使用 します
dest_table 新しい変換先テーブル。
destination_owner コピー先オブジェクトの所有者の名前。
フィルター テーブルをフィルターによって選択 (行方向のフィルター選択) するために使用される新しいストアド プロシージャです。 の既定値は NULL です。 ピアツーピア レプリケーションのパブリケーションでは変更できません。
fire_triggers_on_スナップショット true レプリケートされたユーザー トリガーは、初期スナップショットが適用されたときに実行されます。

注: トリガーをレプリケートするには、schema_optionビットマスク値に0x100値を含める必要があります。
false 初期スナップショットが適用されたときに、レプリケートされたユーザー トリガーが実行されません。
identity_range サブスクライバーで割り当てられた、割り当て済みの ID 範囲のサイズを管理します。 ピア ツー ピア レプリケーションではサポートされません。
ins_cmd 実行する IN Standard Edition RT ステートメント。それ以外の場合は、ログから作成されます。
pre_creation_cmd 同期が適用される前に、レプリケーション先のテーブルを削除したり、切り捨てたりできる作成準備コマンドです。
なし コマンドを使用しません。
drop コピー先テーブルを削除します。
delete コピー先テーブルを削除します。
truncate コピー先テーブルを切り捨てます。
pub_identity_range サブスクライバーで割り当てられた、割り当て済みの ID 範囲のサイズを管理します。 ピア ツー ピア レプリケーションではサポートされません。
schema_option 特定のアーティクルのスキーマ生成オプションのビットマップを指定します。 schema_optionは binary(8) です。 詳細については、このトピックで後述する「解説」を参照してください。
0x00 スナップショット エージェントによるスクリプト作成を無効にします。
0x01 オブジェクトの作成 (CREATE TABLE、CREATE PROCEDURE など) を生成します。
0x02 定義されている場合、アーティクルの変更を反映するストアド プロシージャを生成します。
0x04 ID 列は、IDENTITY プロパティを使用してスクリプト化されます。
0x08 タイムスタンプ列をレプリケートします。 設定されていない場合、タイムスタンプ列はバイナリとしてレプリケートされます。
0x10 対応するクラスター化インデックスを生成します。
0x20 ユーザー定義データ型 (UDT) をサブスクライバーの基本データ型に変換します。 UDT 列に CHECK 制約または DEFAULT 制約がある場合、UDT 列が主キーの一部である場合、または計算列が UDT 列を参照している場合は、このオプションを使用できません。 Oracle パブリッシャーではサポートされていません。
0x40 対応する非クラスター化インデックスを生成します。
0x80 宣言された参照整合性を主キーに含めます。
0x100 定義されている場合、テーブル アーティクル上のユーザー トリガーをレプリケートします。
0x200 FOREIGN KEY 制約をレプリケートします。 参照先テーブルがパブリケーションに含まれていない場合、パブリッシュされたテーブルに対するすべての FOREIGN KEY 制約はレプリケートされません。
0x400 CHECK 制約をレプリケートします。
0x800 既定値をレプリケートします。
0x1000 列レベルの照合順序をレプリケートします。
0x2000 パブリッシュされたアーティクル ソース オブジェクトに関連付けられている拡張プロパティをレプリケートします。
0x4000 テーブル アーティクルで定義されている場合は、一意のキーをレプリケートします。
0x8000 ALTER TABLE ステートメントを使用して、テーブル アーティクルの主キーと一意キーを制約としてレプリケートします。

注: このオプションは非推奨になりました。 代わりに0x800x4000を使用してください。
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 データとインデックスの圧縮オプションをレプリケートします。 詳細については、「 Data Compression」を参照してください。
0x800000000 このオプションを設定すると、サブスクライバーの独自のファイル グループに FILESTREAM データを格納できます。 このオプションが設定されていない場合、FILESTREAM データは既定のファイル グループに格納されます。 レプリケーションではファイル グループは作成されません。そのため、このオプションを設定する場合は、サブスクライバーでスナップショットを適用する前に、ファイル グループを作成する必要があります。 スナップショットを適用する前にオブジェクトを作成する方法の詳細については、「スナップショットが適用される前と後にスクリプトを実行する」を参照してください

関連するオプション の0x100000000を参照してください。
0x1000000000 8000 バイトを超える共通言語ランタイム (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 これらの型の列を SQL Server 2005 (9.x) を実行しているサブスクライバーにレプリケートできるように、geography データ型と geometry データ型を varbinary(max) に変換します。
0x10000000000 geography 型と geometry 型の列にインデックスをレプリケートします
0x20000000000 列の SPAR Standard Edition 属性をレプリケートします。 この属性の詳細については、「スパース列の使用」を参照してください
0x40000000000 スナップショット エージェントによるスクリプトを有効にして、サブスクライバーにメモリ最適化テーブルを作成します。
0x80000000000 メモリ最適化アーティクルのクラスター化インデックスを非クラスター化インデックスに変換します。
status プロパティの新しい状態を指定します。
dts 水平パーティション 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
列名を含める 列名が、レプリケートされる INSERT ステートメントに含まれます。
列名なし 列名は、レプリケートされる INSERT ステートメントに含まれません。
dts 水平パーティションなし アーティクルの行方向のパーティション分割は、変換可能なサブスクリプションによって定義されません。
なし sysarticles テーブルのすべての状態オプションを クリアし、アーティクル を非アクティブとしてマークします。
parameters パラメーター化コマンドを使用して、変更がサブスクライバーに反映されます。 これは新しいアーティクルに対する既定値です。
文字列リテラル 変更は、文字列リテラル値を使用してサブスクライバーに反映されます。
sync_object 同期出力ファイルの生成に使用されるテーブルまたはビューの名前。 の既定値は NULL です。 Oracle パブリッシャーではサポートされていません。
Oracle データベースからパブリッシュされたアーティクルのログ テーブルによって使用されたテーブルスペースを識別します。 詳細については、「Manage Oracle Tablespaces」 (Oracle テーブルスペースの管理) を参照してください。
threshold ディストリビューション エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージの値です。 ピア ツー ピア レプリケーションではサポートされません。
type Oracle パブリッシャーではサポートされていません。
logbased ログベースの記事。
logbased manualboth 手動フィルターと手動ビューを含むログ ベースの記事。 このオプションでは、 sync_object プロパティと フィルター プロパティも設定する必要があります。 Oracle パブリッシャーではサポートされていません。
logbased manualfilter 手動フィルターを使用したログベースの記事。 このオプションでは、 sync_object プロパティと フィルター プロパティも設定する必要があります。 Oracle パブリッシャーではサポートされていません。
logbased manualview 手動ビューを使用する、ログベースのアーティクルです。 このオプションでは、 sync_object プロパティも設定する必要があります。 Oracle パブリッシャーではサポートされていません。
indexed viewlogbased ログ ベースのインデックス付きビューに関する記事。 Oracle パブリッシャーではサポートされていません。 この種の記事では、ベース テーブルを個別に発行する必要はありません。
indexed viewlogbased manualboth 手動フィルターと手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。 このオプションでは、 sync_object プロパティと フィルター プロパティも設定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。
インデックス付き viewlogbased manualfilter 手動フィルターを使用したログ ベースのインデックス付きビューアーティクル。 このオプションでは、 sync_object プロパティと フィルター プロパティも設定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。
インデックス付き viewlogbased manualview 手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。 このオプションでは、 sync_object プロパティも設定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。
upd_cmd 実行する UPDATE ステートメント。それ以外の場合は、ログから構築されます。
NULL NULL 変更できるアーティクル プロパティの一覧を返します。

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

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

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

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

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

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

1 は、アーティクルに対する変更によって既存のサブスクリプションが再初期化されるように指定し、サブスクリプションの再初期化を実行するためのアクセス許可を付与します。

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

[ @publisher = ] 'publisher' SQL Server 以外のパブリッシャーを指定します。 publishersysname で、既定値は NULL です。

Note

SQL Server パブリッシャー でアーティクルのプロパティを変更する場合は、パブリッシャーを使用しないでください。

リターン コードの値

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

解説

sp_changearticleは、スナップショット レプリケーションとトランザクション レプリケーションで使用されます。

アーティクルがピア ツー ピア トランザクション レプリケーションをサポートするパブリケーションに属している場合は、説明、ins_cmd、upd_cmdおよびdel_cmdプロパティのみを変更できます。

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

  • del_cmd

  • dest_table

  • destination_owner

  • ins_cmd

  • pre_creation_cmd

  • schema_options

  • upd_cmd

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

  • del_cmd

  • dest_table

  • destination_owner

  • フィルター

  • ins_cmd

  • status

  • upd_cmd

既存の文書内では、sp_changearticleを使用して、パブリケーション全体を削除して再作成することなく、アーティクルを変更できます。

Note

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

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

次の表では、レプリケーションの種類 (上部に表示) とアーティクルの種類 (最初の 列の下に表示) に基づいて、schema_option の許容値について説明します。

記事の種類 レプリケーションの種類 - トランザクション レプリケーションの種類 - スナップショット
logbased すべてのオプション 0x02以外 のすべてのオプション
logbased manualfilter すべてのオプション 0x02以外 のすべてのオプション
logbased manualview すべてのオプション 0x02以外 のすべてのオプション
インデックス付きビューのログベース すべてのオプション 0x02以外 のすべてのオプション
インデックス付きビューのログベースの手動フィルター すべてのオプション 0x02以外 のすべてのオプション
インデックス付きビューの logbased manualview すべてのオプション 0x02以外 のすべてのオプション
indexed view logbase manualboth すべてのオプション 0x02以外 のすべてのオプション
proc exec 0x01、0x200x20000x4000000x8000000x2000000、0x80000000x100000000x20000000、0x40000000、および0x80000000 0x01、0x200x20000x4000000x8000000x2000000、0x80000000x100000000x20000000、0x40000000、および0x80000000
serializable proc exec 0x01、0x200x20000x4000000x8000000x2000000、0x80000000x100000000x20000000、0x40000000、および0x80000000 0x01、0x200x20000x4000000x8000000x2000000、0x80000000x100000000x20000000、0x40000000、および0x80000000
proc スキーマのみ 0x01、0x200x20000x4000000x8000000x2000000、0x80000000x100000000x20000000、0x40000000、および0x80000000 0x01、0x200x20000x4000000x8000000x2000000、0x80000000x100000000x20000000、0x40000000、および0x80000000
ビュー スキーマのみ 0x01、0x0100x0200x0400x01000x2000、0x400000x100000、0x2000000x4000000x8000000x20000000x80000000x40000000、および0x80000000 0x01、0x0100x0200x0400x01000x2000、0x400000x100000、0x2000000x4000000x8000000x20000000x80000000x40000000、および0x80000000
func スキーマのみ 0x01、0x200x20000x4000000x8000000x2000000、0x80000000x100000000x20000000、0x40000000、および0x80000000 0x01、0x200x20000x4000000x8000000x2000000、0x80000000x100000000x20000000、0x40000000、および0x80000000
インデックス付きビュー スキーマのみ 0x01、0x0100x0200x0400x01000x2000、0x400000x100000、0x2000000x4000000x8000000x20000000x80000000x40000000、および0x80000000 0x01、0x0100x0200x0400x01000x2000、0x400000x100000、0x2000000x4000000x8000000x20000000x80000000x40000000、および0x80000000

Note

キュー更新パブリケーションの場合、0x80のschema_option値を有効にする必要があります。 SQL Server 以外のパブリケーションでサポートされているschema_option値は、0x010x020x10、0x40、0x80、0x10000x4000です。

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2022]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

アクセス許可

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

参照

アーティクルのプロパティの表示と変更
パブリケーションおよびアーティクルのプロパティの変更
sp_addarticle (Transact-SQL)
sp_articlecolumn (Transact-SQL)
sp_droparticle (Transact-SQL)
sp_helparticle (Transact-SQL)
sp_helparticlecolumns (Transact-SQL)