sp_table_validation (Transact-SQL)

Devuelve el recuento de filas o la suma de comprobación de una tabla o vista indizada, o bien compara el recuento de filas o la suma de comprobación proporcionados con los de la tabla o vista indizada especificada. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicaciones y en el suscriptor de la base de datos de suscripciones. No se admite para publicadores de Oracle.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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' ]

Argumentos

  • [ @table=] 'table'
    Es el nombre de la tabla. table es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @expected_rowcount=] expected_rowcountOUTPUT
    Especifica si se devuelve el número de filas esperado en la tabla. expected_rowcount es de tipo int y su valor predeterminado es NULL. Si es NULL, el recuento de filas real se devuelve como parámetro de salida. Si se proporciona un valor, dicho valor se compara con el recuento de filas real para identificar posibles diferencias.

  • [ @expected_checksum=] expected_checksumOUTPUT
    Especifica si se devuelve la suma de comprobación esperada para la tabla. expected_checksum es de tipo numeric y su valor predeterminado es NULL. Si es NULL, la suma de comprobación real se devuelve como parámetro de salida. Si se proporciona un valor, dicho valor se compara con la suma de comprobación real para identificar posibles diferencias.

  • [ @rowcount_only=] type_of_check_requested
    Especifica qué tipo de suma de comprobación o recuento de filas se va a realizar. type_of_check_requested es de tipo smallint y su valor predeterminado es 1.

    Si el valor es 0, se realiza un recuento de filas y una suma de comprobación compatible con Microsoft SQL Server 7.0.

    Si el valor es 1, realice sólo una comprobación del recuento de filas.

    Si es 2, se realiza un recuento de filas y una suma de comprobación binaria.

  • [ @owner=] 'owner'
    Es el nombre del propietario de la tabla. owner es de tipo sysname y su valor predeterminado es NULL.

  • [ @full_or_fast=] full_or_fast
    Es el método utilizado para calcular el número de filas. full_or_fast es de tipo tinyint con un valor predeterminado de 2 y puede ser uno de los valores siguientes.

    Valor

    Descripción

    0

    Realiza un recuento completo mediante COUNT(*).

    1

    Realiza un recuento rápido a partir de sysindexes.rows. El recuento de filas en sysindexes es mucho más rápido que el recuento de filas en la tabla real. Sin embargo, debido a que sysindexes no se actualiza constantemente, el número de filas puede no ser exacto.

    2 (predeterminado)

    Realiza un recuento rápido condicional intentando primero el método rápido. Si el método rápido muestra diferencias, se utiliza el método completo. Si expected_rowcount es NULL y se utiliza el procedimiento almacenado para obtener el valor, siempre se utiliza COUNT(*) de forma completa.

  • [ @shutdown_agent=] shutdown_agent
    Si el Agente de distribución ejecuta sp_table_validation, especifica si el Agente de distribución se debe cerrar de inmediato tras la validación. shutdown_agent es de tipo bit con un valor predeterminado de 0. Si el valor es 0, el agente de replicación no se cierra. Si el valor es 1, se genera el error 20578 y el agente de replicación se señala para su cierre. Este parámetro se omite si un usuario ejecuta directamente sp_table_validation.

  • [ @table_name =] table_name
    Es el nombre de tabla de la vista utilizada para los mensajes de resultados. table_name es de tipo sysname y su valor predeterminado es @table.

  • [ @column_list= ] 'column_list'
    Es la lista de columnas que se deben utilizar en la función de suma de comprobación. column_list es de tipo nvarchar(4000) y su valor predeterminado es NULL. Habilita la validación de artículos de mezcla para especificar una lista de columnas que excluya las columnas calculadas y de marca de tiempo.

Valores de código de retorno

Si, al realizar la validación de la suma de comprobación, la suma esperada es igual a la suma calculada en la tabla, sp_table_validation devuelve un mensaje que indica que la tabla ha pasado la validación de la suma de comprobación. De lo contrario, devuelve un mensaje que indica que la tabla puede no estar sincronizada e informa de la diferencia entre el número de filas real y el esperado.

Si, al realizar la validación del número de filas, el número esperado es igual al número de filas de la tabla, sp_table_validation devuelve un mensaje que indica que la tabla ha pasado la validación del número de filas. De lo contrario, devuelve un mensaje que indica que la tabla puede no estar sincronizada e informa de la diferencia entre el número de filas real y el esperado.

Comentarios

sp_table_validation se utiliza en todos los tipos de replicación. sp_table_validation no se admite en los publicadores de Oracle.

La suma de comprobación calcula una prueba de redundancia cíclica (CRC, Cyclic Redundancy Check) de 32 bits sobre la imagen completa de la fila en la página. No comprueba las columnas de forma selectiva y no puede operar sobre vistas ni particiones verticales de la tabla. Además, la suma de comprobación omite el contenido de las columnas text e image (por diseño).

Al realizar una suma de comprobación, la estructura de la tabla debe ser idéntica en los dos servidores; es decir, las tablas deben tener las mismas columnas y en el mismo orden, el mismo tipo de datos y la misma longitud, y las mismas condiciones NULL o NOT NULL. Por ejemplo, si el publicador ejecutó CREATE TABLE y, a continuación, ALTER TABLE para agregar columnas, pero el script aplicado en el suscriptor es simplemente CREATE TABLE, la estructura NO será la misma. Si no está seguro de que la estructura de las dos tablas sea idéntica, examine syscolumns y confirme que el desplazamiento de cada tabla es el mismo.

Los valores de coma flotante suelen provocar diferencias en las sumas de comprobación si se ha utilizado bcp en modo de carácter, que es lo que sucede si la publicación tiene suscriptores que no son de SQL Server. Dichas diferencias se deben a pequeñas e inevitables diferencias de precisión en la conversión desde y hacia el modo de carácter.

Permisos

Para ejecutar sp_table_validation, debe tener permisos SELECT en la tabla que se va a validar.