sp_table_validation (Transact-SQL)

Restituisce informazioni sul conteggio delle righe o sul valore di checksum per una tabella o vista indicizzata oppure confronta le informazioni sul conteggio delle righe o sul valore di checksum specificate con la tabella o vista indicizzata. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione e nel database di sottoscrizione del Sottoscrittore. Non supportata per i server di pubblicazione Oracle.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • [ @table=] 'table'
    Nome della tabella. table è di tipo sysname e non prevede alcun valore predefinito.

  • [ @expected_rowcount=] expected_rowcountOUTPUT
    Indica se restituire il numero di righe previsto nella tabella. expected_rowcount è di tipo int e il valore predefinito è NULL, con il quale viene restituito il conteggio delle righe effettivo come parametro di output. Se viene specificato un altro valore, questo viene confrontato con il conteggio delle righe effettivo per rilevare eventuali differenze.

  • [ @expected_checksum=] expected_checksumOUTPUT
    Indica se restituire il valore di checksum previsto per la tabella. expected_checksum è di tipo numeric e il valore predefinito è NULL, con cui viene restituito il valore di checksum effettivo come parametro di output. Se viene specificato un altro valore, questo viene confrontato con il valore di checksum effettivo per rilevare eventuali differenze.

  • [ @rowcount_only=] type_of_check_requested
    Specifica il tipo di checksum o conteggio delle righe da eseguire. type_of_check_requested è di tipo smallint e il valore predefinito è 1.

    Se è 0, vengono eseguiti il conteggio delle righe e un checksum compatibile con Microsoft SQL Server 7.0.

    Se è 1, viene semplicemente eseguito il conteggio delle righe.

    Se è 2, vengono eseguiti il conteggio delle righe e il checksum binario.

  • [ @owner=] 'owner'
    Nome del proprietario della tabella. owner è di tipo sysname e il valore predefinito è NULL.

  • [ @full_or_fast=] full_or_fast
    Metodo utilizzato per calcolare il conteggio delle righe. full_or_fast è di tipo tinyint e il valore predefinito è 2. I possibili valori sono i seguenti.

    Valore

    Descrizione

    0

    Esegue un conteggio completo con COUNT(*).

    1

    Esegue un conteggio rapido in sysindexes.rows. Il conteggio delle righe in sysindexes è molto più rapido rispetto al conteggio delle righe nella tabella effettiva. Tuttavia, poiché la tabella sysindexes viene aggiornata in modo non approfondito, è possibile che il conteggio delle righe non sia accurato.

    2 (predefinito)

    Esegue un conteggio rapido condizionale eseguendo innanzitutto un tentativo con il metodo rapido. Se il metodo rapido evidenzia delle differenze, viene applicato il metodo completo. Se expected_rowcount è NULL e si utilizza la stored procedure per ottenere il valore, viene sempre eseguita un'operazione COUNT(*) completa.

  • [ @shutdown_agent=] shutdown_agent
    Se l'agente di distribuzione sta eseguendosp_table_validation, indica se al termine della convalida l'agente viene interrotto immediatamente. shutdown_agent è di tipo bit e il valore predefinito è 0. Se è 0, l'esecuzione dell'agente di replica non viene interrotta. Se è 1, viene restituito l'errore 20578 e l'esecuzione dell'agente di replica viene interrotta. Questo parametro viene ignorato quando la stored procedure sp_table_validation viene eseguita direttamene da un utente.

  • [ @table_name =] table_name
    Nome di tabella della vista utilizzata per i messaggi di output. table_name è di tipo sysname e il valore predefinito è @table.

  • [ @column_list= ] 'column_list'
    Elenco delle colonne da utilizzare nella funzione checksum. column_list è di tipo nvarchar(4000) e il valore predefinito è NULL. Abilita la convalida degli articoli di tipo merge per specificare un elenco di colonne che non include le colonne calcolate e timestamp.

Valori restituiti

Se si esegue una convalida di checksum e il checksum previsto è uguale a quello nella tabella, sp_table_validation restituisce un messaggio per indicare che la tabella ha superato la convalida di checksum. In caso contrario, restituisce un messaggio per indicare che la tabella potrebbe non essere sincronizzata e specifica la differenza tra il numero di righe previsto e quello effettivo.

Se si esegue una convalida del conteggio delle righe e il numero di righe previsto è uguale al numero di righe della tabella, sp_table_validation restituisce un messaggio per indicare che la tabella ha superato la convalida del conteggio delle righe. In caso contrario, restituisce un messaggio per indicare che la tabella potrebbe non essere sincronizzata e specifica la differenza tra il numero di righe previsto e quello effettivo.

Osservazioni

La stored procedure sp_table_validation viene utilizzata in tutti i tipi di replica. sp_table_validation non è supportata per i server di pubblicazione Oracle.

Con l'operazione di checksum viene eseguito un controllo di ridondanza ciclico (CRC, Cyclic Redundancy Check) a 32 bit sull'intera immagine delle righe all'interno della pagina. Non esegue un controllo solo su colonne specifiche e non è eseguibile in una vista o in una partizione verticale della tabella. Il checksum ignora inoltre il contenuto delle colonne di tipo text e image.

Quando si esegue un'operazione di checksum, è necessario che la struttura della tabella nei due server sia identica, ovvero le tabelle nei due server devono includere le stesse colonne nel medesimo ordine aventi lo stesso tipo di dati, la stessa lunghezza e le stesse condizioni NULL/NOT NULL. Se, ad esempio, nel server di pubblicazione è stata eseguita un'istruzione CREATE TABLE e quindi un'istruzione ALTER TABLE per l'inserimento di colonne, ma lo script applicato al Sottoscrittore è una tabella CREATE semplice, la struttura NON è identica. Se non si è sicuri che la struttura delle due tabelle sia identica, controllare in syscolumns che l'offset delle tabelle sia uguale.

Se è stata utilizzata l'utilità bcp in modalità carattere, è probabile che i valori a virgola mobile generino differenze di checksum, come nel caso di una pubblicazione a cui sono associati Sottoscrittori non SQL Server. Ciò è dovuto a differenze di precisione minime ma inevitabili nella conversione da e verso la modalità carattere.

Autorizzazioni

Per eseguire sp_table_validation, è necessario disporre delle autorizzazioni SELECT nella tabella in fase di convalida.