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 для проверяемой таблицы.