Condividi tramite


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 relative alla 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 Se NULL, il conteggio delle righe effettivo viene restituito 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. Se NULL, il checksum effettivo viene restituito 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 che indica che la tabella potrebbe non essere sincronizzata e segnala la differenza tra il numero previsto e il numero effettivo di righe.

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 che indica che la tabella potrebbe non essere sincronizzata e segnala la differenza tra il numero previsto e il numero effettivo di righe.

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 controlla in modo selettivo le colonne e non può operare su una vista o una partizione verticale della tabella. Inoltre, il checksum ignora il contenuto delle colonne di testo e immagine (per impostazione predefinita).

Quando si esegue un checksum, la struttura della tabella deve essere identica tra i due server; ovvero, le tabelle devono avere le stesse colonne esistenti nello stesso ordine, gli stessi tipi di dati e lunghezze e le stesse NULL/NOT NULL condizioni. Ad esempio, se il server di pubblicazione ha eseguito un CREATE TABLEoggetto , un ALTER TABLE oggetto per aggiungere colonne, ma lo script applicato nel Sottoscrittore è una tabella semplice CREATE , la struttura non è la stessa. Se non si è certi che la struttura delle due tabelle sia identica, esaminare sys.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 SELECT per la tabella da convalidare.