次の方法で共有


sp_table_validation (Transact-SQL)

適用対象:SQL Server

テーブルまたはインデックス付きビューの行数またはチェックサム情報を返すか、あるいは提供された行数またはチェックサム情報を指定のテーブルまたはインデックス付きビューと比較します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースとサブスクリプション データベースのサブスクライバー側で実行されます。

Note

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

Transact-SQL 構文表記規則

構文

sp_table_validation [ @table = ] 'table'
    [ , [ @expected_rowcount = ] type_of_check_requested OUTPUT ]
    [ , [ @expected_checksum = ] expected_checksum OUTPUT ]
    [ , [ @rowcount_only = ] rowcount_only ]
    [ , [ @owner = ] 'owner' ]
    [ , [ @full_or_fast = ] full_or_fast ]
    [ , [ @shutdown_agent = ] shutdown_agent ]
    [ , [ @table_name = ] 'table_name' ]
    [ , [ @column_list = ] 'column_list' ]
[ ; ]

引数

[ @table = ] 'table'

テーブルの名前です。 テーブルsysname で、既定値はありません。

[ @expected_rowcount = ] expected_rowcount OUTPUT

テーブル内の予想される行数を返すかどうかを指定します。 @expected_rowcountは int で、既定値は NULL. NULL の場合、実際の行数は出力パラメーターとして返されます。 値が提供されると、その値は実際の行数と照合され、違いがあるかどうかが識別されます。

[ @expected_checksum = ] expected_チェックsum OUTPUT

テーブルの予想されるチェックサムを返すかどうかを指定します。 @expected_チェックsum は数値で、既定値NULL. NULL の場合、実際の チェックsum が出力パラメーターとして返されます。 値が指定されている場合、その値は実際のチェックに対してチェックされ、相違点が特定されます。

[ @rowcount_only = ] type_of_チェック_requested

実行するチェックサムまたは行数の種類を指定します。 @rowcount_onlyは smallint で、既定値は 1.

の場合0は、行数と SQL Server 7.0 互換の チェックsum を実行します。

の場合1は、行数チェックのみを実行します。

の場合2は、行数とバイナリ チェックsum を実行します。

[ @owner = ] 'owner'

テーブルの所有者の名前。 @ownerは sysname で、既定値は NULL.

[ @full_or_fast = ] full_or_fast

行数の計算に使用するメソッド。 @full_or_fastは tinyint で、既定値は 2、これらの値のいずれかになります。

Value 説明
0 COUNT(*) を使用してフル カウントします。
1 から高速カウントを行 sysindexes.rowsいます。 行のカウントは、実際の sysindexes テーブル内の行をカウントするよりもはるかに高速です。 ただし、遅延更新されるため sysindexes 、行数が正確でない可能性があります。
2 (既定値) 最初に高速カウントを試み、条件高速カウントを行います。 高速メソッドが違いを示す場合は、完全なメソッドに戻ります。 expected_rowcountが NULL で、ストアド プロシージャが値の取得に使用されている場合は、常に完全COUNT(*)が使用されます。

[ @shutdown_agent = ] shutdown_agent

ディストリビューション エージェントが実行sp_table_validationされている場合は、検証が完了した直後にディストリビューション エージェントをシャットダウンするかどうかを指定します。 @shutdown_agentはビットで、既定値は 0. の場合 0、レプリケーション エージェントはシャットダウンしません。 エラー 20578 が発生し、レプリケーション エージェントがシャットダウンするように通知された場合 1。 ユーザーが直接実行する場合 sp_table_validation 、このパラメーターは無視されます。

[ @table_name = ] 'table_name'

出力メッセージに使用されるビューのテーブル名。 table_nameは sysname で、既定値は @table です。

[ @column_list = ] 'column_list'

チェックsum 関数で使用する必要がある列の一覧。 column_listは nvarchar(4000) で、既定値は NULL. マージ アーティクルを検証する場合は、計算列とタイムスタンプ列を除く列リストを指定します。

リターン コードの値

チェックsum 検証を実行し、予期されるチェックがテーブル内のチェックum と等しい場合は、sp_table_validationテーブルが検証チェック成功したことを示すメッセージを返します。 それ以外の場合は、テーブルが同期されていない可能性があることを示すメッセージを返し、予想される行数と実際の行数の違いを報告します。

行数の検証を実行し、予想される行数がテーブル内の数と等しい場合は、 sp_table_validation テーブルが行数の検証に合格したことを示すメッセージを返します。 それ以外の場合は、テーブルが同期されていない可能性があることを示すメッセージを返し、予想される行数と実際の行数の違いを報告します。

解説

sp_table_validation は、すべての種類のレプリケーションで使用されます。 sp_table_validation は Oracle パブリッシャーではサポートされていません。

チェックサムは、ページ上の行イメージ全体で 32 ビットの循環冗長チェック (CRC) を計算します。 チェックサムは、列を選択して検査するわけではなく、テーブルのビューや列方向のパーティションで動作できません。 また、チェックsum は、テキスト列と画像列の内容をスキップします (仕様)。

チェックsum を実行する場合、テーブルの構造は 2 つのサーバー間で同一である必要があります。つまり、同じ順序、同じデータ型と長さ、および同じ NULL/NOT NULL 条件でテーブルに同じ列が存在する必要があります。 たとえば、パブリッシャーが CREATE TABLE を実行し、ALTER TABLE で列を追加したが、サブスクライバーに適用されるスクリプトが単純な CREATE テーブルである場合、構造は同じではありません。 2 つのテーブルの構造が同じかどうかが分からなければ、syscolumns を調べて、各テーブルのオフセットが同じであることを確認します。

浮動小数点値は、文字モード bcp が使用された場合にチェックum の違いを生成する可能性があります。これは、パブリケーションに SQL Server 以外のサブスクライバーがある場合です。 これは、文字モード間で変換を実行するときの、わずかではあるが避けられない有効桁数の違いに基づきます。

アクセス許可

実行sp_table_validationするには、検証対象のテーブルに対するStandard Edition LECT 権限が必要です。