sp_addarticle (Transact-SQL)

適用対象: SQL ServerAzure 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'

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

[ @article = ] N'article'

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

[ @source_table = ] N'source_table'

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

[ @destination_table = ] N'destination_table'

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

[ @vertical_partition = ] N'vertical_partition'

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

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

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

[ @type = ] N'type'

アーティクルの種類。 @typeは sysname で、既定値は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 で作成)。 @filterは nvarchar(386) で、既定値は NULL. ビューおよびフィルター ストアド プロシージャを作成するには、sp_articleviewsp_articlefilterを手動で実行する必要があります。 そうでない NULL場合、フィルター プロシージャは作成されません (ストアド プロシージャが手動で作成されていることを前提としています)。

[ @sync_object = ] N'sync_object'

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

[ @ins_cmd = ] N'ins_cmd'

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

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

または

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

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

詳細については、「 トランザクション アーティクル - 変更の伝達方法の指定」を参照してください。

[ @del_cmd = ] N'del_cmd'

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

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

または

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

詳細については、「 トランザクション アーティクル - 変更の伝達方法の指定」を参照してください。

[ @upd_cmd = ] N'upd_cmd'

この記事の更新プログラムをレプリケートするときに使用されるレプリケーション コマンドの種類。 @upd_cmdは nvarchar(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を指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーの ProductCategory スキーマが所有する Production テーブルの場合、パラメーターは 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を指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーの ProductCategory スキーマが所有する Production テーブルの場合、パラメーターは 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

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

[ @creation_script = ] N'creation_script'

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

[ @description = ] N'description'

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

[ @pre_creation_cmd = ] N'pre_creation_cmd'

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

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

[ @filter_clause = ] N'filter_clause'

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

[ @schema_option = ] schema_option

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

Note

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

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

注: Oracle パブリッシャーで大文字と小文字を区別する比較を有効にするには、このオプションを設定する必要があります。
0x20001 パブリッシュされたアーティクル ソース オブジェクトに関連付けられている拡張プロパティをレプリケートします。
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 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 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 メモリ最適化アーティクルのクラスター化インデックスを非クラスター化インデックスに変換します。
0x400000000000 非クラスター化列ストア インデックスをテーブルにレプリケートします。
0x800000000000 フィルター処理された非クラスター化列ストア インデックスをテーブルにレプリケートします。
NULL レプリケーションでは、@schema_optionが既定値に自動的に設定され、その値は他のアーティクルのプロパティに依存します。 [解説] セクションの [既定のスキーマ オプション] テーブルには、アーティクルの種類とレプリケーションの種類に基づく既定のスキーマ オプションが表示されます。

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

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

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

[ @destination_owner = ] N'destination_owner'

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

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

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

[ @status = ] 状態

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

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

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

[ @source_owner = ] N'source_owner'

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

[ @sync_object_owner = ] N'sync_object_owner'

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

[ @filter_owner = ] N'filter_owner'

フィルターの所有者。 @filter_ownerは sysname で、既定値は NULL.

[ @source_object = ] N'source_object'

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

[ @artid = ] artid OUTPUT

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

[ @auto_identity_range = ] N'auto_identity_range'

パブリケーションの作成時に、パブリケーションの ID 範囲の自動処理を有効または無効にします。 @auto_identity_rangeは nvarchar(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_rangeは bigint で、既定値は NULL. @pub_identity_rangeは Oracle パブリッシャーではサポートされていません。

[ @identity_range = ] identity_range

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

[ @threshold = ] しきい値

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

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

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

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

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

[ @use_default_datatypes = ] use_default_datatypes

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

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

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

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

Note

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

[ @identityrangemanagementoption = ] N'identityrangemanagementoption'

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

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

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

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

[ @publisher = ] N'publisher'

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

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

[ @fire_triggers_on_snapshot = ] N'fire_triggers_on_スナップショット'

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

リターン コードの値

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

解説

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

次の表では、@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

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

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

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

記事の種類 トランザクション レプリケーション スナップショット レプリケーション
logbased すべてのオプション すべてのオプション 0x02
logbased manualfilter すべてのオプション すべてのオプション 0x02
logbased manualview すべてのオプション すべてのオプション 0x02
インデックス付きビューのログベース すべてのオプション すべてのオプション 0x02
インデックス付きビューのログベースの手動フィルター すべてのオプション すべてのオプション 0x02
インデックス付きビューの logbased manualview すべてのオプション すべてのオプション 0x02
indexed view logbase manualboth すべてのオプション すべてのオプション 0x02
proc exec 0x010x20, 0x2000, 0x400000, , 0x800000, 0x2000000, 0x8000000, 0x10000000, , 0x20000000, 0x40000000, and 0x80000000 0x010x20, 0x2000, 0x400000, , 0x800000, 0x2000000, 0x8000000, 0x10000000, , 0x20000000, 0x40000000, and 0x80000000
serializable proc exec 0x010x20, 0x2000, 0x400000, , 0x800000, 0x2000000, 0x8000000, 0x10000000, , 0x20000000, 0x40000000, and 0x80000000 0x010x20, 0x2000, 0x400000, , 0x800000, 0x2000000, 0x8000000, 0x10000000, , 0x20000000, 0x40000000, and 0x80000000
proc スキーマのみ 0x010x20, 0x2000, 0x400000, , 0x800000, 0x2000000, 0x8000000, 0x10000000, , 0x20000000, 0x40000000, and 0x80000000 0x010x20, 0x2000, 0x400000, , 0x800000, 0x2000000, 0x8000000, 0x10000000, , 0x20000000, 0x40000000, and 0x80000000
ビュー スキーマのみ 0x01, 0x010, 0x020, 0x040, 0x0100, , 0x2000, 0x40000, 0x100000, 0x200000, , 0x400000, 0x800000, 0x2000000, , 0x8000000, 0x40000000and 0x80000000 0x01, 0x010, 0x020, 0x040, 0x0100, , 0x2000, 0x40000, 0x100000, 0x200000, , 0x400000, 0x800000, 0x2000000, , 0x8000000, 0x40000000and 0x80000000
func スキーマのみ 0x010x20, 0x2000, 0x400000, , 0x800000, 0x2000000, 0x8000000, 0x10000000, , 0x20000000, 0x40000000, and 0x80000000 0x010x20, 0x2000, 0x400000, , 0x800000, 0x2000000, 0x8000000, 0x10000000, , 0x20000000, 0x40000000, and 0x80000000
インデックス付きビュー スキーマのみ 0x01, 0x010, 0x020, 0x040, 0x0100, , 0x2000, 0x40000, 0x100000, 0x200000, , 0x400000, 0x800000, 0x2000000, , 0x8000000, 0x40000000and 0x80000000 0x01, 0x010, 0x020, 0x040, 0x0100, , 0x2000, 0x40000, 0x100000, 0x200000, , 0x400000, 0x800000, 0x2000000, , 0x8000000, 0x40000000and 0x80000000

Note

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

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できます。