Поделиться через


sp_table_validation (Transact-SQL)

Область применения: SQL Server

Либо возвращает количество строк или сведения о контрольной сумме для таблицы или индексированного представления, либо сравнивает заданное количество строк или сведения о контрольной сумме с заданной таблицей или индексированным представлением. Эта хранимая процедура выполняется на издателе в базе данных публикации и на подписчике в базе данных подписки.

Примечание.

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_checksum OUTPUT

Указывает, должна ли быть возвращена ожидаемая контрольная сумма для таблицы. @expected_checksum числовое значение по умолчаниюNULL. Если NULLфактическая контрольная сумма возвращается в качестве выходного параметра. Если значение указано, то оно сверяется с фактической контрольной суммой с целью нахождения различий.

[ @rowcount_only = ] type_of_check_requested

Указывает, какого типа операцию нахождения контрольной суммы или значения количества строк нужно выполнить. @rowcount_only имеет небольшой размер с значением по умолчанию1.

При 0необходимости выполните контрольную сумму, совместимую с SQL Server 7.0.

Если 1выполняется только проверка числа строк.

Если 2, выполните учетную запись строк и двоичную контрольную сумму.

[ @owner = ] "владелец"

Имя владельца таблицы. @owner — sysname с значением по умолчаниюNULL.

[ @full_or_fast = ] full_or_fast

Метод, используемый для вычисления числа строк. @full_or_fast крошечный, с значением по умолчанию 2и может быть одним из этих значений.

значение Описание
0 Выполняет полный подсчет с помощью функции COUNT(*).
1 Выполняет быстрый подсчет из sysindexes.rows. Подсчет строк sysindexes гораздо быстрее, чем подсчет строк в фактической таблице. Тем не менее, поскольку sysindexes неявно обновляется, число строк может быть не точным.
2 (по умолчанию) Выполняет быстрый подсчет по условию, при котором сначала используется быстрый метод. Если быстрый метод дает неточные результаты, переключается на полный подсчет. Если expected_rowcount и NULL используется хранимая процедура для получения значения, всегда используется полная COUNT(*) процедура.

[ @shutdown_agent = ] shutdown_agent

Если выполняется sp_table_validationагент распространения, указывает, должен ли агент распространения завершить работу сразу после завершения проверки. @shutdown_agent бит с значением по умолчанию0. Если 0агент репликации не завершает работу. Если 1возникает ошибка 20578, а агент репликации сигнализирует завершить работу. Этот параметр игнорируется при sp_table_validation выполнении непосредственно пользователем.

[ @table_name = ] 'table_name'

Имя таблицы представления, используемого для выходных сообщений. table_name — sysname с @table по умолчанию.

[ @column_list = ] 'column_list'

Список столбцов, которые должны использоваться в функции контрольной суммы. column_list — nvarchar(4000) с значением по умолчаниюNULL. Включает проверку статей слияния для указания списка столбцов, в который не входят вычисляемые столбцы или столбцы с отметками времени.

Значения кода возврата

Если выполнение проверки контрольной суммы и ожидаемой контрольной суммы равно контрольной сумме в таблице, sp_table_validation возвращает сообщение о том, что таблица прошла проверку контрольной суммы. В противном случае возвращается сообщение о том, что таблица может быть не синхронизирована и сообщает разницу между ожидаемым и фактическим числом строк.

Если выполнение проверки числа строк и ожидаемое количество строк равно числу в таблице, sp_table_validation возвращает сообщение о том, что таблица прошла проверку строк. В противном случае возвращается сообщение о том, что таблица может быть не синхронизирована и сообщает разницу между ожидаемым и фактическим числом строк.

Замечания

sp_table_validation используется во всех типах репликации. sp_table_validation не поддерживается для издателей Oracle.

Контрольная сумма выполняет 32-разрядную циклическую проверку избыточности (CRC) всего образа строки на странице. Он не выборочно проверяет столбцы и не может работать с представлением или вертикальной секцией таблицы. Кроме того, контрольная сумма пропускает содержимое текстовых и графических столбцов (по конструктору).

При выполнении контрольной суммы структура таблицы должна совпадать между двумя серверами; То есть таблицы должны иметь одинаковые столбцы, имеющиеся в одном порядке, одинаковые типы данных и длины, а также NULL/NOT NULL одинаковые условия. Например, если издатель сделал CREATE TABLE, то для ALTER TABLE добавления столбцов, но скрипт, применяемый на подписчике, является простой CREATE таблицей, структура не совпадает. Если вы не уверены, что структура двух таблиц идентична, просмотрите sys.syscolumns и убедитесь, что смещение в каждой таблице совпадает.

Значения с плавающей запятой, скорее всего, могут привести к возникновению различий контрольной суммы в случае использования bcp в режиме символов, что является случаем, если публикация имеет подписчиков, отличных от SQL Server. Это связано с минимальными и неизбежными различиями в точности при преобразовании в символьный режим и из символьного режима.

Разрешения

Для выполнения sp_table_validationнеобходимо иметь разрешения SELECT для проверяемой таблицы.