sp_table_validation (Transact-SQL)

Либо возвращает количество строк или сведения о контрольной сумме для таблицы или индексированного представления, либо сравнивает заданное количество строк или сведения о контрольной сумме с заданной таблицей или индексированным представлением. Эта хранимая процедура выполняется на издателе в базе данных публикации и на подписчике в базе данных подписки. Не поддерживается для издателей 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'
    Имя таблицы. Аргумент table имеет тип sysname и не имеет значения по умолчанию.

  • [ @expected_rowcount=] expected_rowcountOUTPUT
    Указывает, должно ли быть возвращено ожидаемое количество строк в таблице. Аргумент expected_rowcount имеет тип int и значение по умолчанию NULL. Если значение равно NULL, то фактическое число строк возвращается как выходной параметр. Если значение указано, то оно сверяется с фактическим количеством строк с целью нахождения различий.

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

  • [ @rowcount_only=] type_of_check_requested
    Указывает, какой тип нахождения контрольной суммы или значения количества строк нужно выполнить. Аргумент type_of_check_requested имеет тип smallint и значение по умолчанию 1.

    Если 0, выполняется вычисление количества строк и контрольной суммы, совместимой с MicrosoftSQL Server 7.0.

    Если 1, нужно провести только проверку по количеству строк.

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

  • [ @owner=] 'owner'
    Имя владельца таблицы. Аргумент owner имеет тип sysname со значением по умолчанию NULL.

  • [ @full_or_fast=] full_or_fast
    Метод, используемый для вычисления количества строк. Аргумент full_or_fast имеет тип tinyint, значение по умолчанию 2 и может принимать одно из следующих значений.

    Значение

    Описание

    0

    Выполняет полный подсчет с помощью функции COUNT(*).

    1

    Выполняет быстрый подсчет из sysindexes.rows. Подсчет строк в sysindexes происходит намного быстрее, чем подсчет строк в фактической таблице. Однако поскольку sysindexes обновляются с задержкой, количество строк может оказаться неточным.

    2 (по умолчанию)

    Выполняет быстрый подсчет по условию, при котором сначала используется быстрый метод. Если быстрый метод дает неточные результаты, переключается на полный подсчет. Если значение expected_rowcount равно NULL, а для получения значения используется хранимая процедура, то всегда применяется полная функция COUNT(*).

  • [ @shutdown_agent=] shutdown_agent
    Если процедуру sp_table_validation выполняет агент распространителя, данный аргумент указывает, должен ли агент распространителя завершиться немедленно по завершению проверки. Аргумент shutdown_agent имеет тип bit и значение по умолчанию 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) всего образа строки на странице. Она не производит выборочной проверки столбцов и не выполняет операций над представлением или вертикальной секцией таблицы. Кроме того, проверка контрольной суммы пропускает содержимое столбцов text и image (так предусмотрено разработчиками).

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

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

Разрешения

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