sp_addarticle (Transact-SQL)

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

トピック リンク アイコン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 を使用してください。

    このパラメーターは、SQL Server 6.5 との下位互換性を確保するためだけに用意されています。このパラメーターは、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_articleviewsp_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

    操作が行われません。

    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 になります。ピア ツー ピア レプリケーション トポロジ内のアーティクルの場合は、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 (既定値)

    または

    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) で、次のいずれかの値を指定できます。

    説明

    none

    コマンドを使用しません。

    delete

    スナップショットを適用する前に、レプリケーション先テーブルからデータを削除します。アーティクルが行方向にフィルター選択されている場合、フィルター句によって指定された列のデータのみが削除されます。行フィルターが定義されている場合は、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 でサポートされているデータ型に変換します。これらの型をマップする方法の詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」の「以前のバージョンに対する新しいデータ型のマッピング」を参照してください。

    0x40000000

    権限をレプリケートします。

    0x80000000

    パブリケーションの一部ではない任意のオブジェクトに対する依存関係の削除を試行します。

    0x100000000

    このオプションを使用すると、varbinary(max) 列に対して FILESTREAM 属性が指定されている場合にこの属性をレプリケートできます。テーブルを SQL Server 2005 サブスクライバーにレプリケートする場合は、このオプションを指定しないでください。このスキーマ オプションがどのように設定されているかに関係なく、FILESTREAM 列を含むテーブルを SQL Server 2000 サブスクライバーにレプリケートすることはサポートされていません。 

    関連オプション 0x800000000 を参照してください。

    0x200000000

    SQL Server 2008 で導入された日付および時刻のデータ型 (date、time、datetimeoffset、および datetime2) を、以前のバージョンの SQL Server でサポートされているデータ型に変換します。これらの型をマップする方法の詳細については、「レプリケーション トポロジにおける複数バージョンの 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_rangetrue に設定されているときに使用します。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_articleviewsp_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 のインスタンスではないサブスクライバーにレプリケートする場合 (異種レプリケーション)、INSERT、UPDATE、および DELETE コマンドでは Transact-SQL ステートメントのみサポートされます。

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

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

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

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

serializable proc exec

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

proc schema only

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

view schema only

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x40000000、および 0x80000000

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x40000000、および 0x80000000

func schema only

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x40000000、および 0x80000000

indexed view schema only

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x40000000、および 0x80000000

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x40000000、および 0x80000000

注意

キュー更新パブリケーションの場合は、schema_option 値 0x8000 および 0x80 を有効にする必要があります。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

権限

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