sp_addarticle (Transact-SQL)
アーティクルを作成し、パブリケーションに追加します。 このストアド プロシージャは、パブリッシャー側でパブリケーション データベースについて実行されます。
構文
sp_addarticle [ @publication = ] 'publication'
, [ @article = ] 'article'
[ , [ @source_table = ] 'source_table' ]
[ , [ @destination_table = ] 'destination_table' ]
[ , [ @vertical_partition = ] 'vertical_partition' ]
[ , [ @type = ] 'type' ]
[ , [ @filter = ] 'filter' ]
[ , [ @sync_object= ] 'sync_object' ]
[ , [ @ins_cmd = ] 'ins_cmd' ]
[ , [ @del_cmd = ] 'del_cmd' ]
[ , [ @upd_cmd = ] 'upd_cmd' ]
[ , [ @creation_script = ] 'creation_script' ]
[ , [ @description = ] 'description' ]
[ , [ @pre_creation_cmd = ] 'pre_creation_cmd' ]
[ , [ @filter_clause = ] 'filter_clause' ]
[ , [ @schema_option = ] schema_option ]
[ , [ @destination_owner = ] 'destination_owner' ]
[ , [ @status = ] status ]
[ , [ @source_owner = ] 'source_owner' ]
[ , [ @sync_object_owner = ] 'sync_object_owner' ]
[ , [ @filter_owner = ] 'filter_owner' ]
[ , [ @source_object = ] 'source_object' ]
[ , [ @artid = ] article_ID OUTPUT ]
[ , [ @auto_identity_range = ] '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 = ] identityrangemanagementoption ]
[ , [ @publisher = ] 'publisher' ]
[ , [ @fire_triggers_on_snapshot = ] 'fire_triggers_on_snapshot' ]
引数
[ @publication = ] 'publication'
目的のアーティクルを含むパブリケーションの名前を指定します。 名前はデータベース内で一意であることが必要です。 publication のデータ型は sysname で、既定値はありません。[ @article= ] 'article'
アーティクルの名前を指定します。 名前はパブリケーション内で一意であることが必要です。 article のデータ型は sysname で、既定値はありません。[ @source_table = ] 'source_table'
このパラメーターは推奨されていません。代わりに、source_object を使用してください。このパラメーターは、Oracle パブリッシャーに対してサポートされていません。
[ @destination_table = ] 'destination_table'
レプリケーション先 (サブスクリプション) テーブルが source_table またはストアド プロシージャと異なる場合に、レプリケーション先テーブルの名前を指定します。 destination_table のデータ型は sysname で、既定値は NULL です。既定値の場合は、source_table と destination_table は同一と見なされます。[ @vertical_partition = ] 'vertical_partition'
テーブル アーティクル上の列フィルター選択を有効または無効にします。 vertical_partition のデータ型は nchar(5) で、既定値は FALSE です。false は、列フィルター選択を行わずに、すべての列をパブリッシュすることを示します。
true は、宣言された主キー、既定値を持たない NULL 値を許容する列、および一意なキー列を除くすべての列を消去します。 列は、sp_articlecolumn を使用して追加されます。
[ @type = ] 'type'
アーティクルの種類を指定します。 type のデータ型は sysname で、次のいずれかの値を指定できます。値
説明
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 = ] 'filter'
テーブルの水平方向のフィルター選択に使用する (FOR REPLICATION で作成される) ストアド プロシージャを指定します。 filter のデータ型は nvarchar(386) で、既定値は NULL です。 ビューとフィルター ストアド プロシージャを作成するには、sp_articleview と sp_articlefilter を手動で実行する必要があります。 NULL 以外を指定した場合は、ストアド プロシージャが手動で作成されるものと見なされるため、フィルター プロシージャは作成されません。[ @sync_object = ] 'sync_object'
アーティクルのスナップショットに対応するデータ ファイルの生成に使用されるテーブルまたはビューの名前を指定します。 sync_object のデータ型は nvarchar(386) で、既定値は NULL です。 NULL を指定した場合は、sp_articleview が自動的に呼び出され、出力ファイルの生成に使用されるビューが作成されます。 これは、sp_articlecolumn で列を追加した後に行われます。 NULL 以外を指定した場合は、ビューが手動で作成されるものと見なされるため、ビューは作成されません。[ @ins_cmd = ] 'ins_cmd'
このアーティクルの挿入をレプリケートするときに使用するレプリケーション コマンドの種類を指定します。 ins_cmd のデータ型は nvarchar(255) で、次のいずれかの値を指定できます。値
説明
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 になります。 ピア ツー ピア レプリケーション トポロジ内のアーティクルの場合は、GUID 値に _table を付加します。 custom_stored_procedure の指定は、サブスクライバーの更新に対してはサポートされていません。
SQL または NULL
INSERT ステートメントをレプリケートします。 INSERT ステートメントでは、アーティクル内にある、パブリッシュされるすべての列の値が指定されます。 次のコマンドは挿入時にレプリケートされます。
INSERT INTO <table name> VALUES (c1value, c2value, c3value, ..., cnvalue)
詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
[ @del_cmd =] 'del_cmd'
このアーティクルの削除をレプリケートするときに使用するレプリケーション コマンドの種類を指定します。 del_cmd のデータ型は nvarchar(255) で、次のいずれかの値を指定できます。値
説明
NONE
操作が行われません。
CALL sp_MSdel_table (既定値)
-または-
CALL custom_stored_procedure_name
サブスクライバー側で実行されるストアド プロシージャを呼び出します。 この方法でレプリケーションを行うには、schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーのレプリケーション先データベース内で、指定されたストアド プロシージャを作成します。 custom_stored_procedure はユーザーが作成したストアド プロシージャの名前です。 sp_MSdel_table の _table の部分にはレプリケーション先テーブルの名前が入ります。 destination_owner を指定する場合は、レプリケーション先テーブル名の前に指定します。 たとえば、サブスクライバーの Production スキーマによって所有されている ProductCategory テーブルの場合、このパラメーターは CALL sp_MSdel_ProductionProductCategory になります。 ピア ツー ピア レプリケーション トポロジ内のアーティクルの場合は、GUID 値に _table を付加します。 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 =] 'upd_cmd'
このアーティクルの更新をレプリケートするときに使用するレプリケーション コマンドの種類を指定します。 upd_cmd のデータ型は nvarchar(255) で、次のいずれかの値を指定できます。値
説明
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 になります。 ピア ツー ピア レプリケーション トポロジ内のアーティクルの場合は、GUID 値に _table を付加します。 サブスクライバーの更新では、ユーザーが作成したストアド プロシージャを指定できません。
SCALL sp_MSupd_table (default)
-または-
SCALL custom_stored_procedure_name
SCALL スタイルのパラメーターを使用してストアド プロシージャを呼び出します。 この方法でレプリケーションを行うには、schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーのレプリケーション先データベース内で、指定されたストアド プロシージャを作成します。 custom_stored_procedure はユーザーが作成したストアド プロシージャの名前です。 sp_MSupd_table の _table の部分にはレプリケーション先テーブルの名前が入ります。 destination_owner を指定する場合は、レプリケーション先テーブル名の前に指定します。 たとえば、サブスクライバーの Production スキーマによって所有されている ProductCategory テーブルの場合、このパラメーターは SCALL sp_MSupd_ProductionProductCategory になります。 ピア ツー ピア レプリケーション トポロジ内のアーティクルの場合は、GUID 値に _table を付加します。 サブスクライバーの更新では、ユーザーが作成したストアド プロシージャを指定できません。
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
注 構文が CALL 構文、MCALL 構文、SCALL 構文、および XCALL 構文のいずれであるかによって、サブスクライバーに反映されるデータの量が異なります。 CALL 構文では、挿入されたすべての列および削除されたすべての列に関するすべての値が渡されます。 SCALL 構文では、影響を受けた列の値のみが渡されます。 XCALL 構文では、列が変更されているかどうかに関係なく、列の以前の値を含むすべての列の値が渡されます。 詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
[ @creation_script =] 'creation_script'
オプションのアーティクル スキーマ スクリプトのパスと名前を指定します。このスクリプトは、サブスクリプション データベースでアーティクルを作成する場合に使用されます。 creation_script のデータ型は nvarchar(255) で、既定値は NULL です。[ @description =] 'description'
アーティクルの説明エントリを指定します。 description のデータ型は nvarchar(255) で、既定値は NULL です。[ @pre_creation_cmd =] 'pre_creation_cmd'
このアーティクルのスナップショットを適用したときに、サブスクライバー側で同じ名前の既存のオブジェクトが検出された場合に取る措置を指定します。 pre_creation_cmd のデータ型は nvarchar(10) で、次のいずれかの値を指定できます。値
説明
なし
コマンドを使用しません。
削除
スナップショットを適用する前に、レプリケーション先テーブルからデータを削除します。 アーティクルが行方向にフィルター選択されている場合、フィルターによって指定された列のデータのみが削除されます。 行フィルターが定義されている場合は、Oracle パブリッシャーに対してはサポートされません。
drop (既定値)
レプリケーション先テーブルを破棄します。
truncate
レプリケーション先テーブルを切り捨てます。 ODBC サブスクライバーまたは OLE DB サブスクライバーに対しては無効です。
[ @filter_clause=] 'filter_clause'
行フィルターを定義する制限句 (WHERE) を指定します。 制限句を入力する場合は、WHERE キーワードを省略します。 filter_clause のデータ型は ntext で、既定値は NULL です。 詳細については、「パブリッシュされたデータのフィルター選択」を参照してください。[ @schema_option =] schema_option
指定したアーティクルに対するスキーマ生成オプションのビットマスクを指定します。 schema_option のデータ型は binary(8) で、次の 1 つ以上の値から求めた | (ビット演算子 OR) 演算の結果を指定できます。注 この値が NULL の場合は、他のアーティクルのプロパティに応じて、アーティクルの有効なスキーマ オプションが自動生成されます。 「解説」に記載されている「既定のスキーマ オプション」の表は、アーティクルの種類とレプリケーションの種類の組み合わせに基づいて選択される値を示しています。
値
説明
0x00
スナップショット エージェントによるスクリプト作成を無効にして、creation_script を使用します。
0x01
オブジェクト作成スクリプト (CREATE TABLE、CREATE PROCEDURE など) を生成します。 ストアド プロシージャ アーティクルの既定値です。
0x02
定義されている場合、アーティクルの変更を反映するストアド プロシージャを生成します。
0x04
ID 列のスクリプトが IDENTITY プロパティを使用して作成されます。
0x08
timestamp 列をレプリケートします。 このオプションが設定されていない場合、timestamp 列は binary としてレプリケートされます。
0x10
対応するクラスター化インデックスを生成します。 このオプションが設定されていない場合でも、パブリッシュされたテーブルに主キーと一意の制約が既に定義されている場合は、これらに関連するインデックスが生成されます。
0x20
サブスクライバーでユーザー定義データ型 (UDT) を基本データ型に変換します。 UDT 列に CHECK 制約または DEFAULT 制約があるときに、UDT 列が主キーの一部になっている場合、または計算列で UDT 列が参照されている場合、このオプションは使用できません。 Oracle パブリッシャーに対してはサポートされていません。
0x40
対応する非クラスター化インデックスを生成します。 このオプションが設定されていない場合でも、パブリッシュされたテーブルに主キーと一意の制約が既に定義されている場合は、これらに関連するインデックスが生成されます。
0x80
主キー制約をレプリケートします。 0x10 および 0x40 オプションが有効になっていない場合でも、この制約に関連するインデックスがあれば、そのインデックスもレプリケートされます。
0x100
テーブル アーティクル上のユーザー トリガーをレプリケートします (ユーザー トリガーが定義されている場合)。 Oracle パブリッシャーに対してはサポートされていません。
0x200
外部キー制約をレプリケートします。 参照するテーブルがパブリケーションの一部でない場合は、パブリッシュされたテーブルのすべての外部キー制約がレプリケートされるわけではありません。 Oracle パブリッシャーに対してはサポートされていません。
0x400
CHECK 制約をレプリケートします。 Oracle パブリッシャーに対してはサポートされていません。
0x800
既定値をレプリケートします。 Oracle パブリッシャーに対してはサポートされていません。
0x1000
列レベルの照合順序をレプリケートします。
注 大文字と小文字を区別する比較を有効にするには、このオプションを Oracle パブリッシャーに対して設定する必要があります。
0x2000
パブリッシュされたアーティクルのソース オブジェクトに関連付けられた拡張プロパティをレプリケートします。 Oracle パブリッシャーに対してはサポートされていません。
0x4000
UNIQUE 制約をレプリケートします。 0x10 および 0x40 オプションが有効になっていない場合でも、この制約に関連するインデックスがあれば、そのインデックスもレプリケートされます。
0x8000
このオプションは SQL Server 2005 パブリッシャーでは無効です。
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 で導入されたラージ オブジェクト データ型 (nvarchar(max)、varchar(max)、および varbinary(max)) を、SQL Server 2000 でサポートされているデータ型に変換します。
0x40000000
権限をレプリケートします。
0x80000000
パブリケーションの一部ではない任意のオブジェクトに対する依存関係の削除を試行します。
0x100000000
このオプションを使用すると、varbinary(max) 列に対して FILESTREAM 属性が指定されている場合にこの属性をレプリケートできます。 テーブルを SQL Server 2005 サブスクライバーにレプリケートする場合は、このオプションを指定しないでください。 このスキーマ オプションがどのように設定されているかに関係なく、FILESTREAM 列を含むテーブルを SQL Server 2000 サブスクライバーにレプリケートすることはサポートされていません。
関連オプション 0x800000000 を参照してください。
0x200000000
SQL Server 2008 で導入された日付および時刻のデータ型 (date、time、datetimeoffset、および datetime2) を、以前のバージョンの SQL Server でサポートされているデータ型に変換します。
0x400000000
データとインデックスの圧縮オプションをレプリケートします。 詳細については、「データの圧縮」を参照してください。
0x800000000
このオプションを設定すると、サブスクライバーの独自のファイル グループに FILESTREAM データを格納できます。 このオプションが設定されていない場合、FILESTREAM データは既定のファイル グループに格納されます。 レプリケーションではファイル グループは作成されないので、このオプションを設定する場合は、サブスクライバーでスナップショットを適用する前にファイル グループを作成しておく必要があります。 スナップショットを適用する前にオブジェクトを作成する方法の詳細については、「スナップショットが適用される前および後のスクリプトの実行」を参照してください。
関連オプション 0x100000000 を参照してください。
0x1000000000
SQL Server 2005 を実行しているサブスクライバーに UDT 型の列をレプリケートできるように、8,000 バイトを超える共通言語ランタイム (CLR) ユーザー定義型 (UDT) を varbinary(max) に変換します。
0x2000000000
SQL Server 2005 を実行しているサブスクライバーに hierarchyid 型の列をレプリケートできるように、hierarchyid データ型を varbinary(max) に変換します。 レプリケートされたテーブルで hierarchyid 列を使用する方法の詳細については、「hierarchyid (Transact-SQL)」を参照してください。
0x4000000000
テーブルのフィルター選択されたインデックスをレプリケートします。 フィルター選択されたインデックスの詳細については、「フィルター選択されたインデックスの作成」を参照してください。
0x8000000000
SQL Server 2005 を実行しているサブスクライバーに geography 型および geometry 型の列をレプリケートできるように、これらのデータ型を varbinary(max) に変換します。
0x10000000000
geography 型と geometry 型の列のインデックスをレプリケートします。
0x20000000000
列の SPARSE 属性をレプリケートします。 この属性の詳細については、「スパース列の使用」を参照してください。
NULL
レプリケーションによって schema_option は自動的に既定値に設定されます。この値は、他のアーティクルのプロパティに応じて異なります。 「解説」に記載されている「既定のスキーマ オプション」の表は、アーティクルの種類とレプリケーションの種類に基づいた既定のスキーマ オプションを示します。
SQL Server 以外のパブリケーションの既定値は、0x050D3 です。
すべての schema_option 値が、どのレプリケーションの種類およびアーティクルの種類に対しても有効であるとは限りません。 「解説」の「有効なスキーマ オプション」の一覧表は、アーティクルの種類とレプリケーションの種類の組み合わせに基づいて選択できる有効なスキーマ オプションを示しています。
[ @destination_owner =] 'destination_owner'
レプリケーション先オブジェクトの所有者の名前を指定します。 destination_owner のデータ型は sysname で、既定値は NULL です。 destination_owner を指定しない場合は、次のルールに基づいて所有者が自動的に指定されます。条件
[対象オブジェクトの所有者]
パブリケーションはネイティブ モードの一括コピーを使用して、SQL Server サブスクライバーのみをサポートする初期スナップショットを生成します。
既定値 source_owner の値に設定されます。
SQL Server 以外のパブリッシャーからパブリッシュされます。
既定では、レプリケーション先データベースの所有者に設定されます。
パブリケーションはキャラクター モードの一括コピーを使用して、SQL Server 以外のサブスクライバーをサポートする初期スナップショットを生成します。
割り当てられていません。
SQL Server 以外のサブスクライバーをサポートするには、destination_owner は NULL であることが必要です。
[ @status=] status
アーティクルがアクティブであるかどうか、および変更がどのように反映されるかについての追加オプションを指定します。 status のデータ型は tinyint で、次の 1 つ以上の値から求めた | (ビット演算子 OR) 演算の結果を指定できます。値
説明
1
アーティクルがアクティブです。
8
INSERT ステートメントに列名を含めます。
16 (既定値)
パラメーター化されたステートメントを使用します。
24
INSERT ステートメントに列名を含めて、パラメーター化されたステートメントを使用します。
64
単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。
たとえば、パラメーター化されたステートメントを使用するアクティブなアーティクルの場合、この列の値は 17 になります。 0 の値はアーティクルが非アクティブであり、追加のプロパティが定義されていないことを意味します。
[ @source_owner =] 'source_owner'
ソース オブジェクトの所有者を指定します。 source_owner のデータ型は sysname で、既定値は NULL です。 Oracle パブリッシャーに対しては source_owner を指定する必要があります。[ @sync_object_owner =] 'sync_object_owner'
パブリッシュされたアーティクルを定義するビューの所有者を指定します。 sync_object_owner のデータ型は sysname で、既定値は NULL です。[ @filter_owner =] 'filter_owner'
フィルターの所有者を指定します。 filter_owner のデータ型は sysname で、既定値は NULL です。[ @source_object=] 'source_object'
パブリッシュされるデータベース オブジェクトを指定します。 source_object のデータ型は sysname で、既定値は NULL です。 source_table が NULL である場合、source_object を NULL にすることはできません。source_table を使用する代わりに、source_object を使用してください。 スナップショット レプリケーションまたはトランザクション レプリケーションを使用してパブリッシュできるオブジェクトの種類の詳細については、「データとデータベース オブジェクトのパブリッシュ」を参照してください。[ @artid = ] article_ID OUTPUT
新しいアーティクルのアーティクル ID です。 article_ID のデータ型は int で、既定値は NULL です。このパラメーターは OUTPUT パラメーターです。[ @auto_identity_range = ] 'auto_identity_range'
パブリケーションの作成時、パブリケーションでの自動 ID 範囲処理を有効または無効にします。 auto_identity_range のデータ型は nvarchar(5) で、次のいずれかの値を指定できます。値
説明
true
自動 ID 範囲処理を有効にします。
false
自動 ID 範囲処理を無効にします。
NULL (既定値)
ID 範囲処理は identityrangemanagementoption によって設定されます。
注 auto_identity_range は推奨されておらず、旧バージョンとの互換性のためのみに用意されています。 ID 範囲の管理オプションを指定するには、identityrangemanagementoption を使用してください。 詳細については、「ID 列のレプリケート」を参照してください。
[ @pub_identity_range = ] pub_identity_range
アーティクルの identityrangemanagementoption が auto に設定されている場合、または auto_identity_range が true に設定されている場合、パブリッシャー側の範囲の大きさを制御します。 pub_identity_range のデータ型は bigint で、既定値は NULL です。 Oracle パブリッシャーに対してはサポートされていません。[ @identity_range = ] identity_range
アーティクルの identityrangemanagementoption が auto に設定されている場合、または auto_identity_range が true に設定されている場合、サブスクライバー側の範囲の大きさを制御します。 identity_range のデータ型は bigint で、既定値は NULL です。 auto_identity_range が true に設定されているときに使用します。 Oracle パブリッシャーに対してはサポートされていません。[ @threshold = ] threshold
ディストリビューション エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージの値を指定します。 threshold で指定されている値のパーセンテージが使用されると、ディストリビューション エージェントは新しい ID 範囲を作成します。 threshold のデータ型は bigint で、既定値は NULL です。 identityrangemanagementoption が auto に設定されているとき、または auto_identity_range が true に設定されているときに使用します。 Oracle パブリッシャーに対してはサポートされていません。[ @force_invalidate_snapshot = ] force_invalidate_snapshot
このストアド プロシージャが実行する操作によって既存のスナップショットが無効になることを許可します。 force_invalidate_snapshot のデータ型は bit で、既定値は 0 です。0 に設定すると、アーティクルを追加しても、スナップショットが無効になることはありません。 変更に新しいスナップショットが必要であることをストアド プロシージャが検出すると、エラーが発生し、変更は加えられません。
1 に設定すると、アーティクルの追加によってスナップショットが無効になることがあります。また、新しいスナップショットを必要とするサブスクリプションがある場合は、既存のスナップショットに古いスナップショットのマークを付けて、新しいスナップショットを生成することができます。
[ @use_default_datatypes = ] use_default_datatypes
Oracle パブリッシャーからアーティクルをパブリッシュするときに既定の列のデータ型マッピングが使用されるかどうかを示します。 use_default_datatypes のデータ型は bit で、既定値は 1 です。1 の場合、既定のアーティクル列のマッピングが使用されます。 既定のデータ型のマッピングは、sp_getdefaultdatatypemapping を実行することによって表示できます。
0 の場合、カスタム アーティクル列マッピングが定義されています。このため、sp_articleview は sp_addarticle によって呼び出されません。
use_default_datatypes が 0 に設定されている場合は、既定から変更された各列のマッピングを実行するたびに sp_changearticlecolumndatatype を実行する必要があります。 すべてのカスタム列マッピングを定義した後に、sp_articleview を実行する必要があります。
注 このパラメーターは、Oracle パブリッシャーにのみ使用されます。 SQL Server パブリッシャーに対して use_default_datatypes を 0 に設定すると、エラーが生成されます。
[ @identityrangemanagementoption = ] identityrangemanagementoption
アーティクルに対する ID 範囲の管理がどのように処理されるかを指定します。 identityrangemanagementoption のデータ型は nvarchar(10) で、次のいずれかの値を指定できます。値
説明
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 の値は無視されます。
詳細については、「ID 列のレプリケート」を参照してください。
[ @publisher = ] 'publisher'
SQL Server 以外のパブリッシャーを指定します。 publisher のデータ型は sysname で、既定値は NULL です。注 アーティクルを SQL Server パブリッシャーに追加するときは、publisher を使用しないでください。
[ @fire_triggers_on_snapshot = ] 'fire_triggers_on_snapshot'
初期スナップショットが適用されたときに、レプリケートされたユーザー トリガーが実行されるかどうかを示します。 fire_triggers_on_snapshot のデータ型は nvarchar(5) で、既定値は FALSE です。 true は、スナップショットが適用されるときに、レプリケートされたテーブル上でユーザー トリガーが実行されることを表します。 トリガーをレプリケートするには、schema_option のビットマスク値に値 0x100 を含める必要があります。
リターン コード値
成功した場合は 0 が、失敗した場合は 1 がそれぞれ返されます。
説明
sp_addarticle は、スナップショット レプリケーションまたはトランザクション レプリケーションで使用します。
既定では、列データ型がレプリケーションによってサポートされていない場合は、レプリケーションによってソース テーブル内の列がパブリッシュされることはありません。 このような列をパブリッシュする場合は、sp_articlecolumn を実行して列を追加する必要があります。
ピア ツー ピア トランザクション レプリケーションをサポートしているパブリケーションにアーティクルを追加するときは、次の制限が適用されます。
パラメーター化されたステートメントをすべてのログベースのアーティクルに対して指定する必要があります。 status 値に 16 を指定する必要があります。
レプリケーション先テーブルの名前と所有者は、ソース テーブルと一致する必要があります。
アーティクルは、行方向または列方向にフィルター選択することはできません。
自動 ID 範囲管理はサポートされていません。 identityrangemanagementoption に対して値 manual を指定する必要があります。
テーブル内に timestamp 列が存在する場合は、schema_option に 0x08 を指定し、列を timestamp としてレプリケートする必要があります。
ins_cmd、upd_cmd、および del_cmd には、値 SQL を指定できません。
詳細については、「ピア ツー ピア トランザクション レプリケーション」を参照してください。
オブジェクトをパブリッシュすると、その定義がサブスクライバーにコピーされます。 他の 1 つ以上のオブジェクトに依存しているデータベース オブジェクトをパブリッシュする場合は、参照されるオブジェクトをすべてパブリッシュする必要があります。 たとえば、テーブルに依存するビューをパブリッシュする場合、テーブルもパブリッシュする必要があります。
vertical_partition が true に設定されている場合、sp_addarticle は、最後の sp_articlecolumn が追加された後、sp_articleview が呼び出されるまでビューの作成を延期します。
パブリケーションで更新サブスクリプションが許可されている場合、パブリッシュされたテーブルに uniqueidentifier 列がないときは、sp_addarticle によって uniqueidentifier 列がテーブルに自動的に追加されます。
SQL Server (異種レプリケーション) のインスタンスではないサブスクライバーにレプリケートする場合、Transact-SQL ステートメントのみが、INSERT、UPDATE、および DELETE の各コマンドについてサポートされます。
ログ リーダー エージェントを実行している場合、アーティクルをピア ツー ピア パブリケーションに追加すると、ログ リーダー エージェントと、アーティクルを追加するプロセスとの間にデッドロックが発生する場合があります。 この問題を回避するには、アーティクルをピア ツー ピア パブリケーションに追加する前に、レプリケーション モニターを使用して、アーティクルを追加するノードのログ リーダー エージェントを停止します。 アーティクルを追加した後で、ログ リーダー エージェントを再起動します。
@del\_cmd = 'NONE' または @ins\_cmd = 'NONE' を設定すると、範囲指定された更新が発生したときに UPDATE コマンドが送信されないため、これらのコマンドの反映も影響を受ける場合があります。 範囲指定された更新は、サブスクライバーに対する DELETE/INSERT ペアとしてレプリケートするパブリッシャーの UPDATE ステートメントの種類です。
既定のスキーマ オプション
次の表では、schema_options がユーザーによって指定されていない場合に、レプリケーションによって設定される既定値について説明します。既定値は、レプリケーションの種類 (トランザクションまたはスナップショット) とアーティクルの種類 (1 列目のデータ) によって異なります。
アーティクルの種類 |
レプリケーションの種類 |
|
---|---|---|
|
トランザクション |
スナップショット |
aggregate schema only |
0x01 |
0x01 |
func schema only |
0x01 |
0x01 |
indexed view schema only |
0x01 |
0x01 |
indexed view logbased |
0x30F3 |
0x3071 |
indexed view logbase manualboth |
0x30F3 |
0x3071 |
indexed view logbased manualfilter |
0x30F3 |
0x3071 |
indexed view logbased manualview |
0x30F3 |
0x3071 |
logbased |
0x30F3 |
0x3071 |
logbased manualfilter |
0x30F3 |
0x3071 |
logbased manualview |
0x30F3 |
0x3071 |
proc exec |
0x01 |
0x01 |
proc schema only |
0x01 |
0x01 |
serializable proc exec |
0x01 |
0x01 |
view schema only |
0x01 |
0x01 |
注 |
---|
パブリケーションでキュー更新が有効になっている場合は、schema_option 値 0x80 が、表の既定値に加わります。 SQL Server 以外のパブリケーションの schema_option の既定値は、0x050D3 です。 |
有効なスキーマ オプション
この表では、レプリケーションの種類 (トランザクションまたはスナップショット) とアーティクルの種類 (1 列目のデータ) に基づいて、schema_option に指定できる値について説明します。
アーティクルの種類 |
レプリケーションの種類 |
|
---|---|---|
|
トランザクション |
スナップショット |
logbased |
すべてのオプション |
0x02 を除くすべてのオプション |
logbased manualfilter |
すべてのオプション |
0x02 を除くすべてのオプション |
logbased manualview |
すべてのオプション |
0x02 を除くすべてのオプション |
indexed view logbased |
すべてのオプション |
0x02 を除くすべてのオプション |
indexed view logbased manualfilter |
すべてのオプション |
0x02 を除くすべてのオプション |
indexed view logbased manualview |
すべてのオプション |
0x02 を除くすべてのオプション |
indexed view logbase manualboth |
すべてのオプション |
0x02 を除くすべてのオプション |
proc exec |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000、および 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000、および 0x80000000 |
serializable proc exec |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000、および 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000、および 0x80000000 |
proc schema only |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000、および 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000、および 0x80000000 |
view schema only |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000、および 0x80000000 |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000、および 0x80000000 |
func schema only |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000、および 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000、および 0x80000000 |
indexed view schema only |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000、および 0x80000000 |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000、および 0x80000000 |
注 |
---|
キュー更新パブリケーションの場合は、schema_option 値 0x8000 および 0x80 を有効にする必要があります。 SQL Server 以外のパブリケーションに対してサポートされている schema_option 値は、0x01、0x02、0x10、0x40、0x80、0x1000、0x4000、および 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
権限
sp_addarticle を実行できるのは、sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバーだけです。
関連項目
参照
sp_articlecolumn (Transact-SQL)
sp_articlefilter (Transact-SQL)
sp_changearticle (Transact-SQL)
sp_helparticlecolumns (Transact-SQL)
レプリケーション ストアド プロシージャ (Transact-SQL)