sp_table_validation (Transact-SQL)

Si applica a:SQL Server

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.

Nota

sp_table_validation non è supportato per i server di pubblicazione Oracle.

Convenzioni di 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 è sysname, senza impostazione predefinita.

[ @expected_rowcount = ] expected_rowcount OUTPUT

Indica se restituire il numero di righe previsto nella tabella. @expected_rowcount è int, con 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_checksum OUTPUT

Indica se restituire il valore di checksum previsto per la tabella. @expected_checksum è numerico, con 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. @rowcount_only è smallint, con un valore predefinito .1

Se 0, eseguire un conteggio delle righe e un checksum compatibile con SQL Server 7.0.

Se 1, eseguire solo un controllo del conteggio delle righe.

Se 2, eseguire un conteggio delle righe e un checksum binario.

[ @owner = ] 'owner'

Nome del proprietario della tabella. @owner è sysname, con un valore predefinito .NULL

[ @full_or_fast = ] full_or_fast

Metodo utilizzato per calcolare il conteggio delle righe. @full_or_fast è tinyint, con un valore predefinito , 2e può essere uno di questi valori.

Valore Descrizione
0 Esegue un conteggio completo con COUNT(*).
1 Esegue il conteggio rapido da sysindexes.rows. Il conteggio delle righe in sysindexes è molto più veloce del conteggio delle righe nella tabella effettiva. Tuttavia, poiché sysindexes viene aggiornato in modo differinte, il conteggio delle righe potrebbe non essere 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 la stored procedure viene usata per ottenere il valore, viene sempre usato un valore completo COUNT(*) .

[ @shutdown_agent = ] shutdown_agent

Se il agente di distribuzione esegue sp_table_validation, specifica se il agente di distribuzione deve essere arrestato immediatamente al termine della convalida. @shutdown_agent è bit, con il valore predefinito 0. Se 0, l'agente di replica non viene arrestato. Se 1, viene generato l'errore 20578 e l'agente di replica viene segnalato per l'arresto. Questo parametro viene ignorato quando sp_table_validation viene eseguito direttamente da un utente.

[ @table_name = ] 'table_name'

Nome della tabella della vista utilizzata per i messaggi di output. table_name è sysname, con un valore predefinito di @table.

[ @column_list = ] 'column_list'

Elenco di colonne da utilizzare nella funzione checksum. column_list è nvarchar(4000), con un 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 del codice restituito

Se si esegue una convalida checksum e il checksum previsto è uguale al checksum nella tabella, sp_table_validation restituisce un messaggio che indica che la tabella ha superato la convalida del 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 previsto di righe è uguale al numero nella tabella, sp_table_validation restituisce un messaggio che indica 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:

sp_table_validation viene usato in tutti i tipi di replica. sp_table_validation non è supportato 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. Inoltre, il checksum ignora il contenuto delle colonne di testo e immagine (per impostazione predefinita).

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 è certi che la struttura delle due tabelle sia identica, esaminare syscolumns e verificare che l'offset in ogni tabella sia lo stesso.

È probabile che i valori a virgola mobile generino differenze di checksum se è stato usato bcp in modalità carattere, ovvero nel caso in cui la pubblicazione disponga di 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 edizione Standard LECT per la tabella da convalidare.