次の方法で共有


sp_addarticle (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

sp_addarticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @source_table = ] N'source_table' ]
    [ , [ @destination_table = ] N'destination_table' ]
    [ , [ @vertical_partition = ] N'vertical_partition' ]
    [ , [ @type = ] N'type' ]
    [ , [ @filter = ] N'filter' ]
    [ , [ @sync_object = ] N'sync_object' ]
    [ , [ @ins_cmd = ] N'ins_cmd' ]
    [ , [ @del_cmd = ] N'del_cmd' ]
    [ , [ @upd_cmd = ] N'upd_cmd' ]
    [ , [ @creation_script = ] N'creation_script' ]
    [ , [ @description = ] N'description' ]
    [ , [ @pre_creation_cmd = ] N'pre_creation_cmd' ]
    [ , [ @filter_clause = ] N'filter_clause' ]
    [ , [ @schema_option = ] schema_option ]
    [ , [ @destination_owner = ] N'destination_owner' ]
    [ , [ @status = ] status ]
    [ , [ @source_owner = ] N'source_owner' ]
    [ , [ @sync_object_owner = ] N'sync_object_owner' ]
    [ , [ @filter_owner = ] N'filter_owner' ]
    [ , [ @source_object = ] N'source_object' ]
    [ , [ @artid = ] artid OUTPUT ]
    [ , [ @auto_identity_range = ] N'auto_identity_range' ]
    [ , [ @pub_identity_range = ] pub_identity_range ]
    [ , [ @identity_range = ] identity_range ]
    [ , [ @threshold = ] threshold ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @use_default_datatypes = ] use_default_datatypes ]
    [ , [ @identityrangemanagementoption = ] N'identityrangemanagementoption' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @fire_triggers_on_snapshot = ] N'fire_triggers_on_snapshot' ]
[ ; ]

引数

[ @publication = ] N'publication'

アーティクルを含むパブリケーションの名前。 名前はデータベース内で一意である必要があります。 @publicationsysname で、既定値はありません。

[ @article = ] N'article'

アーティクルの名前。 名前はパブリケーション内で一意であることが必要です。 @articlesysname で、既定値はありません。

[ @source_table = ] N'source_table'

このパラメーターは非推奨になりました。代わりに @source_object を使用してください。 @source_tablenvarchar(386) で、既定値は NULL です。 @source_table は Oracle パブリッシャーではサポートされていません。

[ @destination_table = ] N'destination_table'

変換先 (サブスクリプション) テーブルの名前 ( @source_table またはストアド プロシージャと異なる場合)。 @destination_tablesysname で、既定値は NULL です。 NULLに設定すると、@source_table@destination_tableに等しいことを意味します。

[ @vertical_partition = ] N'vertical_partition'

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

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

  • true は、宣言された主キー、既定のない null 許容列、および一意のキー列を除くすべての列をクリアします。 列は、 sp_articlecolumnを使用して追加されます。

[ @type = ] N'type'

アーティクルの種類。 @typesysname で、既定値は NULL で、次のいずれかの値を指定できます。

Value 説明
aggregate schema only スキーマのみを使用する集計関数。
func schema only スキーマのみの関数。
indexed view logbased ログ ベースのインデックス付きビューに関する記事。 Oracle パブリッシャーではサポートされていません。 この種の記事では、ベース テーブルを個別に発行する必要はありません。
indexed view logbased manualboth 手動フィルターと手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。 このオプションでは、 @sync_object パラメーターと @filter パラメーターの両方を指定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。
indexed view logbased manualfilter 手動フィルターを使用したログ ベースのインデックス付きビューアーティクル。 このオプションでは、 @sync_object パラメーターと @filter パラメーターの両方を指定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。
indexed view logbased manualview 手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。 このオプションでは、 @sync_object パラメーターを指定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。
indexed view schema only スキーマのみを使用するインデックス付きビュー。 この種類の記事では、ベース テーブルも発行する必要があります。
logbased (既定) ログベースの記事。
logbased manualboth 手動フィルターと手動ビューを含むログ ベースの記事。 このオプションでは、 @sync_object パラメーターと @filter パラメーターの両方を指定する必要があります。 Oracle パブリッシャーではサポートされていません。
logbased manualfilter 手動フィルターを使用したログベースの記事。 このオプションでは、 @sync_object パラメーターと @filter パラメーターの両方を指定する必要があります。 Oracle パブリッシャーではサポートされていません。
logbased manualview 手動ビューを使用する、ログベースのアーティクルです。 このオプションでは、 @sync_object パラメーターを指定する必要があります。 Oracle パブリッシャーではサポートされていません。
proc exec アーティクルのすべてのサブスクライバーにストアド プロシージャの実行をレプリケートします。 Oracle パブリッシャーではサポートされていません。 proc exec の代わりに、オプション serializable proc exec を使用することをお勧めします。 詳細については、「トランザクション レプリケーションでのストアド プロシージャの実行の公開」の「ストアド プロシージャの実行の種類」 参照。 変更データ キャプチャが有効な場合は使用できません。
proc schema only スキーマのみを使用するプロシージャ。 Oracle パブリッシャーではサポートされていません。
serializable proc exec シリアル化可能なトランザクションのコンテキスト内で実行される場合にのみ、ストアド プロシージャの実行をレプリケートします。 Oracle パブリッシャーではサポートされていません。

プロシージャの実行をレプリケートするには、明示的なトランザクション内でプロシージャを実行する必要もあります。
view schema only スキーマのみを使用するビュー。 Oracle パブリッシャーではサポートされていません。 このオプションを使用する場合は、ベース テーブルも発行する必要があります。

[ @filter = ] N'filter'

テーブルを水平方向にフィルター処理するために使用されるストアド プロシージャ (FOR REPLICATION で作成)。 @filternvarchar(386) で、既定値は NULL です。 ビューおよびフィルター ストアド プロシージャを作成するには、 sp_articleviewsp_articlefilter を手動で実行する必要があります。 NULLしない場合、フィルター プロシージャは作成されません (ストアド プロシージャが手動で作成されていることを前提としています)。

[ @sync_object = ] N'sync_object'

この記事のスナップショットを表すために使用されるデータ ファイルの生成に使用されるテーブルまたはビューの名前。 @sync_objectnvarchar(386) で、既定値は NULL です。 NULL場合、sp_articleviewが呼び出され、出力ファイルの生成に使用されるビューが自動的に作成されます。 これは、 sp_articlecolumnを含む列を追加した後に発生します。 NULLしない場合、ビューは作成されません (ビューが手動で作成されていることを前提としています)。

[ @ins_cmd = ] N'ins_cmd'

この記事の挿入をレプリケートするときに使用するレプリケーション コマンドの種類。 @ins_cmdnvarchar(255)であり、次のいずれかの値を指定できます。

Value 説明
NONE アクションは行われません。
CALL sp_MSins_<table> (既定)

または

CALL custom_stored_procedure_name
サブスクライバー側で実行されるストアド プロシージャを呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 <custom_stored_procedure> は、ユーザーが作成したストアド プロシージャの名前です。 sp_MSins_<table> には、パラメーターの _table 部分の代わりに変換先テーブルの名前が含まれています。 @destination_ownerを指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーのProduction スキーマが所有するProductCategory テーブルの場合、パラメーターはCALL sp_MSins_ProductionProductCategoryされます。 ピア ツー ピア レプリケーション トポロジの記事では、 <table> に GUID 値が追加されます。 サブスクライバーの更新では、 <custom_stored_procedure> の指定はサポートされていません。
SQL または NULL INSERT ステートメントをレプリケートします。 INSERT ステートメントは、記事で公開されているすべての列の値を提供します。 次のコマンドは挿入時にレプリケートされます。

INSERT INTO <table name> VALUES (c1value, c2value, c3value, ..., cnvalue)

詳細については、「 Transactional アーティクル - 変更の反映方法の指定を参照してください。

[ @del_cmd = ] N'del_cmd'

この記事の削除をレプリケートするときに使用されるレプリケーション コマンドの種類。 @del_cmdnvarchar(255)であり、次のいずれかの値を指定できます。

Value 説明
NONE アクションは行われません。
CALLsp_MSdel_<table> (既定)

または

CALL <custom_stored_procedure_name>
サブスクライバー側で実行されるストアド プロシージャを呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 <custom_stored_procedure> は、ユーザーが作成したストアド プロシージャの名前です。 sp_MSdel_<table> には、パラメーターの _table 部分の代わりに変換先テーブルの名前が含まれています。 @destination_ownerを指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーのProduction スキーマが所有するProductCategory テーブルの場合、パラメーターはCALL sp_MSdel_ProductionProductCategoryされます。 ピア ツー ピア レプリケーション トポロジの記事では、 <table> に GUID 値が追加されます。 サブスクライバーの更新では、 <custom_stored_procedure> の指定はサポートされていません。
XCALL sp_MSdel_<table>

または

XCALL <custom_stored_procedure_name>
スタイル パラメーターを受け取るストアド プロシージャ XCALL 呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 ユーザーが作成したストアド プロシージャを指定してサブスクライバーを更新することはできません。
SQL または NULL DELETE ステートメントをレプリケートします。 DELETE ステートメントには、すべての主キー列の値が指定されます。 このコマンドは、削除時にレプリケートされます。

DELETE FROM <table name> WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue

詳細については、「 Transactional アーティクル - 変更の反映方法の指定を参照してください。

[ @upd_cmd = ] N'upd_cmd'

この記事の更新プログラムをレプリケートするときに使用されるレプリケーション コマンドの種類。 @upd_cmdnvarchar(255)であり、次のいずれかの値を指定できます。

Value 説明
NONE アクションは行われません。
CALL sp_MSupd_<table>

または

CALL <custom_stored_procedure_name>
サブスクライバー側で実行されるストアド プロシージャを呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。
MCALL sp_MSupd_<table>

または

MCALL <custom_stored_procedure_name>
スタイル パラメーターを受け取るストアド プロシージャ MCALL 呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 <custom_stored_procedure> は、ユーザーが作成したストアド プロシージャの名前です。 sp_MSupd_<table> には、パラメーターの <table> 部分の代わりに変換先テーブルの名前が含まれています。 @destination_ownerを指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーのProduction スキーマが所有するProductCategory テーブルの場合、パラメーターはMCALL sp_MSupd_ProductionProductCategoryされます。 ピア ツー ピア レプリケーション トポロジの記事では、 <table> に GUID 値が追加されます。 ユーザーが作成したストアド プロシージャを指定してサブスクライバーを更新することはできません。
SCALL sp_MSupd_<table> (既定)

または

SCALL <custom_stored_procedure_name>
スタイル パラメーターを受け取るストアド プロシージャ SCALL 呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 <custom_stored_procedure> は、ユーザーが作成したストアド プロシージャの名前です。 sp_MSupd_<table> には、パラメーターの _table 部分の代わりに変換先テーブルの名前が含まれています。 @destination_ownerを指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーのProduction スキーマが所有するProductCategory テーブルの場合、パラメーターはSCALL sp_MSupd_ProductionProductCategoryされます。 ピア ツー ピア レプリケーション トポロジの記事では、 _table に GUID 値が追加されます。 ユーザーが作成したストアド プロシージャを指定してサブスクライバーを更新することはできません。
XCALL sp_MSupd_<table>

または

XCALL <custom_stored_procedure_name>
スタイル パラメーターを受け取るストアド プロシージャ XCALL 呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 ユーザーが作成したストアド プロシージャを指定してサブスクライバーを更新することはできません。
SQL または NULL UPDATE ステートメントをレプリケートします。 UPDATEステートメントは、すべての列値と主キー列の値に対して提供されます。 このコマンドは、更新時にレプリケートされます。

UPDATE <table name> SET c1 = c1value, SET c2 = c2value, SET cn = cnvalue WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue

Note

CALLMCALLSCALL、およびXCALLの構文によって、サブスクライバーに伝達されるデータの量が異なります。 CALL構文は、挿入および削除されたすべての列のすべての値を渡します。 SCALL構文は、影響を受ける列に対してのみ値を渡します。 XCALL構文は、変更されたかどうかにかかわらず、列の前の値を含め、すべての列の値を渡します。 詳細については、「 Transactional アーティクル - 変更の反映方法の指定を参照してください。

[ @creation_script = ] N'creation_script'

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

[ @description = ] N'description'

記事の説明的なエントリ。 @descriptionnvarchar(255) で、既定値は NULL です。

[ @pre_creation_cmd = ] N'pre_creation_cmd'

この記事のスナップショットを適用するときに、サブスクライバーで同じ名前の既存のオブジェクトを検出した場合にシステムが実行する必要があることを指定します。 @pre_creation_cmdnvarchar(10)であり、次のいずれかの値を指定できます。

Value 説明
none コマンドを使用しません。
delete スナップショットを適用する前に、レプリケーション先テーブルからデータを削除します。 アーティクルが水平方向にフィルター処理されると、フィルター句で指定された列のデータのみが削除されます。 行フィルターが定義されている場合は、Oracle パブリッシャーに対してはサポートされません。
drop (既定) コピー先テーブルを削除します。
truncate コピー先テーブルを切り捨てます。 ODBC または OLE DB サブスクライバーでは無効です。

[ @filter_clause = ] N'filter_clause'

水平フィルターを定義する制限 (WHERE) 句。 制限句を入力するときは、キーワード WHERE を省略します。 @filter_clausenvarchar(max) で、既定値は NULL です。 詳細については、「パブリッシュされたデータのフィルター選択」を参照してください。

[ @schema_option = ] schema_option

特定のアーティクルのスキーマ生成オプションのビットマスク。 @schema_optionvarbinary(8)で、既定値は NULLで、 にすることができます|(ビットごとの OR) これらの値の 1 つ以上の積:

Note

この値が NULL場合、アーティクルの他のプロパティに応じて、アーティクルの有効なスキーマ オプションが自動生成されます。 既定のスキーマ オプションには、アーティクルの種類とレプリケーションの種類の組み合わせに基づいて選択される値が表示されます。

Value 説明
0x00 スナップショット エージェントによるスクリプト作成を無効にし、@creation_scriptを使用します。
0x01 オブジェクト作成スクリプト (CREATE TABLE、CREATE PROCEDURE など) を生成します。 この値は、ストアド プロシージャアーティクルの既定値です。
0x02 定義されている場合、アーティクルの変更を反映するストアド プロシージャを生成します。
0x04 ID 列は、IDENTITY プロパティを使用してスクリプト化されます。
0x08 timestamp 列をレプリケートします。 設定されていない場合、 timestamp 列は binary としてレプリケートされます。
0x10 対応するクラスター化インデックスを生成します。 このオプションが設定されていない場合でも、主キーと一意の制約に関連するインデックスは、パブリッシュされたテーブルで既に定義されている場合に生成されます。
0x20 1 ユーザー定義データ型 (UDT) をサブスクライバーの基本データ型に変換します。 このオプションは、UDT 列に CHECK 制約または DEFAULT 制約がある場合、UDT 列が主キーの一部である場合、または計算列が UDT 列を参照している場合には使用できません。
0x40 対応する非クラスター化インデックスを生成します。 このオプションが設定されていない場合でも、主キーと一意の制約に関連するインデックスは、パブリッシュされたテーブルで既に定義されている場合に生成されます。
0x80 主キー制約をレプリケートします。 オプション 0x100x40 が有効になっていない場合でも、制約に関連するインデックスもレプリケートされます。
0x100 1 定義されている場合、テーブル アーティクル上のユーザー トリガーをレプリケートします。
0x200 1 外部キー制約をレプリケートします。 参照先テーブルがパブリケーションの一部でない場合、パブリッシュされたテーブルに対するすべての外部キー制約はレプリケートされません。
0x400 1 check 制約をレプリケートします。
0x800 1 既定値をレプリケートします。
0x1000 列レベルの照合順序をレプリケートします。

注: Oracle パブリッシャーで大文字と小文字を区別する比較を有効にするには、このオプションを設定する必要があります。
0x2000 1 パブリッシュされたアーティクル ソース オブジェクトに関連付けられている拡張プロパティをレプリケートします。
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 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 データとインデックスの圧縮オプションをレプリケートします。 詳細については、「 Data 圧縮」を参照してください。
0x800000000 このオプションを設定すると、サブスクライバーの独自のファイル グループに FILESTREAM データを格納できます。 このオプションが設定されていない場合、FILESTREAM データは既定のファイル グループに格納されます。 レプリケーションではファイル グループは作成されません。そのため、このオプションを設定する場合は、サブスクライバーでスナップショットを適用する前にファイル グループを作成する必要があります。 スナップショットを適用する前にオブジェクトを作成する方法の詳細については、「 スナップショットが適用される前と後のスクリプトの実行」を参照してください

関連するオプションの 0x100000000を参照してください。
0x1000000000 8,000 バイトを超える共通言語ランタイム (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 型の列にインデックスをレプリケートします。
0x20000000000 列の SPARSE 属性をレプリケートします。 この属性の詳細については、「 スパース列の使用を参照してください。
0x40000000000 スナップショット エージェントによるスクリプト作成を有効にして、サブスクライバーにメモリ最適化テーブルを作成します。
0x80000000000 メモリ最適化アーティクルのクラスター化インデックスを非クラスター化インデックスに変換します。
0x400000000000 非クラスター化列ストア インデックスをテーブルにレプリケートします。
0x800000000000 フィルター処理された非クラスター化列ストア インデックスをテーブルにレプリケートします。
NULL レプリケーションでは、 @schema_option が既定値に自動的に設定され、その値は他のアーティクルのプロパティに依存します。 [解説] セクションの [既定のスキーマ オプション] テーブルには、アーティクルの種類とレプリケーションの種類に基づく既定のスキーマ オプションが表示されます。

SQL Server 以外のパブリケーションの既定値は 0x050D3です。

1 Oracle パブリッシャーではサポートされていません。

すべての @schema_option 値が、すべての種類のレプリケーションとアーティクルの種類に対して有効であるわけではありません。 「解説」セクションの「 Valid Schema Options 」テーブルには、アーティクルの種類とレプリケーションの種類の組み合わせに基づいて選択できる有効なスキーマ オプションが示されています。

[ @destination_owner = ] N'destination_owner'

目的のオブジェクトの所有者名。 @destination_ownersysname で、既定値は NULL です。 @destination_ownerが指定されていない場合、所有者は次の規則に基づいて自動的に指定されます。

条件 対象オブジェクトの所有者
パブリケーションでは、ネイティブ モードの一括コピーを使用して、SQL Server サブスクライバーのみをサポートする初期スナップショットが生成されます。 既定値は @source_owner の値です。
SQL Server 以外のパブリッシャーから発行されます。 既定では、コピー先データベースの所有者が使用されます。
パブリケーションでは、文字モードの一括コピーを使用して、SQL Server 以外のサブスクライバーをサポートする初期スナップショットが生成されます。 割り当てられていません。

SQL Server 以外のサブスクライバーをサポートするには、 @destination_ownerNULLする必要があります。

[ @status = ] status

アーティクルがアクティブかどうかを指定し、変更を反映する方法に関する追加のオプションを指定します。 @statustinyint であり、 |(ビットごとの OR) これらの値の 1 つ以上の積。

Value 説明
1 アーティクルがアクティブです。
8 INSERT ステートメントに列名を含めます。
16 (既定) パラメーター化されたステートメントを使用します。
24 INSERTステートメントに列名を含め、パラメーター化されたステートメントを使用します。
64 単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

たとえば、パラメーター化されたステートメントを使用するアクティブなアーティクルでは、この列の値は 17 になります。 0値は、アーティクルが非アクティブであり、追加のプロパティが定義されていないことを意味します。

[ @source_owner = ] N'source_owner'

ソース オブジェクトの所有者。 @source_ownersysname で、既定値は NULL です。 @source_owner は Oracle パブリッシャーに対して指定する必要があります。

[ @sync_object_owner = ] N'sync_object_owner'

パブリッシュされたアーティクルを定義するビューの所有者。 @sync_object_ownersysname で、既定値は NULL です。

[ @filter_owner = ] N'filter_owner'

フィルターの所有者。 @filter_ownersysname で、既定値は NULL です。

[ @source_object = ] N'source_object'

パブリッシュするデータベース オブジェクト。 @source_objectsysname で、既定値は NULL です。 @source_tableNULLされている場合、@source_objectNULLできません。 @source_tableの代わりに、@source_objectを使用する必要があります。 スナップショット レプリケーションまたはトランザクション レプリケーションを使用してパブリッシュできるオブジェクトの種類の詳細については、「 データ オブジェクトとデータベース オブジェクトのパブリッシュを参照してください。

[ @artid = ] artid OUTPUT

新しい記事のアーティクル ID。 @artid は、 int 型の OUTPUT パラメーターです。

[ @auto_identity_range = ] N'auto_identity_range'

パブリケーションの作成時に、パブリケーションの ID 範囲の自動処理を有効または無効にします。 @auto_identity_rangenvarchar(5)であり、次のいずれかの値を指定できます。

Value 説明
true ID 範囲の自動処理を有効にします
false 自動 ID 範囲処理を無効にします。
NULL (既定) ID 範囲の処理は、 @identityrangemanagementoptionによって設定されます。

Note

@auto_identity_range は非推奨であり、下位互換性のみを目的として提供されています。 ID 範囲管理オプションを指定するには、 @identityrangemanagementoption を使用する必要があります。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。

[ @pub_identity_range = ] pub_identity_range

アーティクルが auto または @auto_identity_range true に設定@identityrangemanagementoption場合に、パブリッシャーの範囲サイズを制御@pub_identity_rangebigint で、既定値は NULL です。 @pub_identity_range は Oracle パブリッシャーではサポートされていません。

[ @identity_range = ] identity_range

アーティクルが auto または @auto_identity_range true に設定@identityrangemanagementoption場合にサブスクライバーの範囲サイズを制御します@identity_rangebigint で、既定値は NULL です。 @auto_identity_rangetrue に設定されている場合に使用されます。 @identity_range は Oracle パブリッシャーではサポートされていません。

[ @threshold = ] しきい値

ディストリビューション エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージの値です。 @thresholdで指定された値の割合を使用すると、ディストリビューション エージェントによって新しい ID 範囲が作成されます。 @thresholdint で、既定値は NULL です。 @identityrangemanagementoptionauto または @auto_identity_rangetrue に設定されている場合に使用@threshold は Oracle パブリッシャーではサポートされていません。

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

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

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

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

[ @use_default_datatypes = ] use_default_datatypes

Oracle パブリッシャーからアーティクルを発行するときに、既定の列データ型マッピングを使用するかどうかを指定します。 @use_default_datatypesbit で、既定値は 1 です。

  • 1 = 既定のアーティクル列マッピングが使用されます。 既定のデータ型マッピングは、 sp_getdefaultdatatypemappingを実行することで表示できます。

  • 0 = カスタム アーティクル列マッピングが定義されているため、 sp_articleviewsp_addarticleによって呼び出されません。

@use_default_datatypes0 に設定されている場合は、既定から変更される列マッピングごとにsp_changearticlecolumndatatypeを 1 回実行する必要があります。 すべてのカスタム列マッピングが定義されたら、 sp_articleviewを実行する必要があります。

Note

このパラメーターは、Oracle パブリッシャーにのみ使用してください。 @USE_DEFAULT_DATATYPESを SQL Server パブリッシャーの0に設定すると、エラーが発生します。

[ @identityrangemanagementoption = ] N'identityrangemanagementoption'

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

Value 説明
none 明示的な ID 範囲の管理は行われません。 このオプションは、以前のバージョンの SQL Server との下位互換性のためにのみ推奨されます。 ピア レプリケーションは許可されません。
manual NOT FOR REPLICATION を使用して ID 列をマークし、手動での ID 範囲の処理を有効にします。
auto ID 範囲の自動管理を指定します。
NULL (既定) 既定値は、@auto_identity_rangeの値がtrueされていない場合にnoneします。 既定では、ピアツーピア トポロジの既定値に manual します (@auto_identity_range は無視されます)。

下位互換性のために、 @identityrangemanagementoption の値が NULLされると、 @auto_identity_range の値がチェックされます。 ただし、 @identityrangemanagementoption の値が NULLされていない場合、 @auto_identity_range の値は無視されます。

詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。

[ @publisher = ] N'publisher'

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

@publisher は、SQL Server パブリッシャーにアーティクルを追加するときに使用しないでください。

[ @fire_triggers_on_snapshot = ] N'fire_triggers_on_snapshot'

初期スナップショットが適用されたときにレプリケートされたユーザー トリガーが実行される場合。 @fire_triggers_on_snapshotnvarchar(5) で、既定値は false です。 true は、スナップショットが適用されるときに、レプリケートされたテーブルに対するユーザー トリガーが実行されることを意味します。 トリガーをレプリケートするには、 @schema_option のビットマスク値に 0x100値を含める必要があります。

リターン コードの値

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

解説

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

既定では、レプリケーションで列データ型がサポートされていない場合、レプリケーションではソース テーブル内の列は発行されません。 このような列を発行する必要がある場合は、 sp_articlecolumn 実行して列を追加する必要があります。

ピアツーピア トランザクション レプリケーションをサポートするパブリケーションにアーティクルを追加する場合、次の制限が適用されます。

  • パラメーター化されたステートメントは、すべてのログベースアーティクルに対して指定する必要があります。 @status値には16を含める必要があります。

  • コピー先テーブルの名前と所有者は、ソース テーブルと一致している必要があります。

  • 記事を水平方向または垂直方向にフィルター処理することはできません。

  • ID 範囲の自動管理はサポートされていません。 @identityrangemanagementoptionには manual の値を指定する必要があります。

  • テーブルに timestamp 列が存在する場合は、 @schema_option に0x08を含め、列を timestamp としてレプリケートする必要があります。

  • SQLの値は、@ins_cmd@upd_cmd、および@del_cmdに指定できません。

詳細については、「 ピア間 - トランザクション レプリケーション」を参照してください。

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

@vertical_partitiontrue に設定されている場合、sp_addarticlesp_articleviewが呼び出されるまで (最後のsp_articlecolumnが追加されるまで) ビューの作成を延期します。

パブリケーションでサブスクリプションの更新が許可され、パブリッシュされたテーブルに uniqueidentifier 列がない場合は、sp_addarticleuniqueidentifier 列がテーブルに自動的に追加されます。

SQL Server のインスタンスではないサブスクライバーにレプリケートする場合 (異種レプリケーション)、 INSERTUPDATE、および DELETE コマンドでは Transact-SQL ステートメントのみがサポートされます。

ログ リーダー エージェントが実行されている場合、ピア ツー ピア パブリケーションにアーティクルを追加すると、ログ リーダー エージェントとアーティクルを追加するプロセスの間でデッドロックが発生する可能性があります。 この問題を回避するには、ピアツーピア パブリケーションにアーティクルを追加する前に、レプリケーション モニターを使用して、アーティクルを追加するノードでログ リーダー エージェントを停止します。 記事を追加した後、ログ リーダー エージェントを再起動します。

@del_cmdNONEに設定するか、@ins_cmdNONEに設定すると、UPDATEコマンドの伝達も、有界更新が発生したときにそれらのコマンドを送信しないことによって影響を受ける可能性があります。 (有界更新は、サブスクライバーのDELETE/INSERT ペアとしてレプリケートするパブリッシャーからのUPDATEステートメントの種類です)。

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

次の表では、 @schema_options がユーザーによって指定されていない場合に、レプリケーションによって設定される既定値について説明します。この値は、レプリケーションの種類 (上部に表示) とアーティクルの種類 (最初の列の下に表示) によって異なります。

記事の種類 トランザクション レプリケーション スナップショット レプリケーション
集計スキーマのみ 0x01 0x01
func スキーマのみ 0x01 0x01
インデックス付きビュー スキーマのみ 0x01 0x01
インデックス付きビューのログベース 0x30F3 0x3071
indexed view logbase manualboth 0x30F3 0x3071
インデックス付きビューのログベースの手動フィルター 0x30F3 0x3071
インデックス付きビューの logbased manualview 0x30F3 0x3071
logbased 0x30F3 0x3071
logbased manualfilter 0x30F3 0x3071
logbased manualview 0x30F3 0x3071
proc exec 0x01 0x01
proc スキーマのみ 0x01 0x01
serializable proc exec 0x01 0x01
ビュー スキーマのみ 0x01 0x01

Note

パブリケーションでキュー更新が有効になっている場合、0x80@schema_option値が、表に示されている既定値に追加されます。 SQL Server 以外のパブリケーションの既定の @schema_option0x050D3

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

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

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

Note

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

DECLARE @publication    AS sysname;
DECLARE @table AS sysname;
DECLARE @filterclause AS nvarchar(500);
DECLARE @filtername AS nvarchar(386);
DECLARE @schemaowner AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @table = N'Product';
SET @filterclause = N'[DiscontinuedDate] IS NULL'; 
SET @filtername = N'filter_out_discontinued';
SET @schemaowner = N'Production';

-- Add a horizontally and vertically filtered article for the Product table.
-- Manually set @schema_option to ensure that the Production schema 
-- is generated at the Subscriber (0x8000000).
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @table, 
    @source_object = @table,
    @source_owner = @schemaowner, 
    @schema_option = 0x80030F3,
    @vertical_partition = N'true', 
    @type = N'logbased',
    @filter_clause = @filterclause;

-- (Optional) Manually call the stored procedure to create the 
-- horizontal filtering stored procedure. Since the type is 
-- 'logbased', this stored procedures is executed automatically.
EXEC sp_articlefilter 
    @publication = @publication, 
    @article = @table, 
    @filter_clause = @filterclause, 
    @filter_name = @filtername;

-- Add all columns to the article.
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table;

-- Remove the DaysToManufacture column from the article
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table, 
    @column = N'DaysToManufacture', 
    @operation = N'drop';

-- (Optional) Manually call the stored procedure to create the 
-- vertical filtering view. Since the type is 'logbased', 
-- this stored procedures is executed automatically.
EXEC sp_articleview 
    @publication = @publication, 
    @article = @table,
    @filter_clause = @filterclause;
GO

アクセス許可

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