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


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 (создает таблицу), то структуры НЕ БУДУТ одинаковыми. Если вы не уверены, что структура двух таблиц идентична, просмотрите syscolumns и убедитесь, что смещение в каждой таблице совпадает.

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

Разрешения

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