sp_table_validation (Transact-SQL)

Gibt Zeilenanzahl- oder Prüfsummeninformationen für eine Tabelle oder indizierte Sicht zurück oder vergleicht die angegebenen Zeilenanzahl- oder Prüfsummeninformationen mit der angegebenen Tabelle oder indizierten Sicht. Diese gespeicherte Prozedur wird für die Veröffentlichungsdatenbank auf dem Verleger und für die Abonnementdatenbank auf dem Abonnenten ausgeführt. Die Ausführung auf Oracle-Verlegern wird nicht unterstützt.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

  • [ @table=] 'table'
    Der Name der Tabelle. table ist ein Wert vom Datentyp sysname und hat keinen Standardwert.

  • [ @expected_rowcount=] expected_rowcountOUTPUT
    Gibt an, ob die erwartete Anzahl von Zeilen in der Tabelle zurückgegeben werden soll. expected_rowcount ist ein Wert vom Datentyp int; der Standardwert ist NULL. Mit NULL wird die tatsächliche Zeilenanzahl als Ausgabeparameter zurückgegeben. Wenn ein Wert angegeben wird, wird dieser mit der tatsächlichen Zeilenanzahl verglichen, um etwaige Unterschiede festzustellen.

  • [ @expected_checksum=] expected_checksumOUTPUT
    Gibt an, ob die erwartete Prüfsumme für die Tabelle zurückgegeben werden soll. expected_checksum ist ein Wert vom Datentyp numeric; der Standardwert ist NULL. Mit NULL wird die tatsächliche Prüfsumme als Ausgabeparameter zurückgegeben. Wenn ein Wert angegeben wird, wird dieser mit der tatsächlichen Prüfsumme verglichen, um etwaige Unterschiede festzustellen.

  • [ @rowcount_only=] type_of_check_requested
    Gibt an, welche Form der Prüfsummenberechnung oder Zeilenzählung ausgeführt werden soll. type_of_check_requested ist ein Wert vom Datentyp smallint; der Standardwert ist 1.

    Bei 0 werden eine Zeilenzählung und eine mit Microsoft SQL Server 7.0 kompatible Prüfsummenberechnung ausgeführt.

    Bei 1 wird nur eine Zeilenzählung durchgeführt.

    Bei 2 werden eine Zeilenzählung und eine binäre Prüfsummenberechnung ausgeführt.

  • [ @owner=] 'owner'
    Der Name des Besitzers der Tabelle. owner ist ein Wert vom Datentyp sysname; der Standardwert ist NULL.

  • [ @full_or_fast=] full_or_fast
    Die Methode, die zum Berechnen der Zeilenanzahl verwendet wird. full_or_fast ist ein Wert vom Datentyp tinyint; der Standardwert ist 2. Die folgenden Werte sind möglich.

    Wert

    Beschreibung

    0

    Führt eine vollständige Zählung mit COUNT(*) durch.

    1

    Führt eine schnelle Zählung in sysindexes.rows aus. Die Zeilenzählung in sysindexes erfolgt erheblich schneller als das Zählen der Zeilen in der eigentlichen Tabelle. Da sysindexes jedoch nur verzögert aktualisiert wird, ist die Zeilenanzahl möglicherweise nicht ganz genau.

    2 (Standardwert)

    Führt eine bedingte schnelle Zählung durch, indem zunächst versucht wird, die schnelle Methode anzuwenden. Ergeben sich mit der schnellen Methode Unterschiede, wird die Methode für die vollständige Zählung verwendet. Wenn expected_rowcount gleich NULL ist und die gespeicherte Prozedur verwendet wird, um den Wert abzurufen, wird stets eine vollständige Zählung mit COUNT(*) durchgeführt.

  • [ @shutdown_agent=] shutdown_agent
    Wenn der Verteilungs-Agent sp_table_validation ausführt, gibt dieses Argument an, ob der Verteilungs-Agent sofort nach Beendigung der Überprüfung heruntergefahren werden soll. shutdown_agent ist ein Wert vom Datentyp bit; der Standardwert ist 0. Bei 0 wird der Replikations-Agent nicht heruntergefahren. Bei 1 wird der Fehler 20578 gemeldet und dem Replikations-Agent das Signal zum Herunterfahren gegeben. Dieser Parameter wird ignoriert, wenn sp_table_validation direkt von einem Benutzer ausgeführt wird.

  • [ @table_name =] table_name
    Der Tabellenname der Sicht, die für Ausgabemeldungen verwendet wird. table_name ist ein Wert vom Datentyp sysname; der Standardwert ist @table.

  • [ @column_list= ] 'column_list'
    Gibt die Liste der Spalten an, die in der Prüfsummenfunktion verwendet werden sollen. column_list ist ein Wert vom Datentyp nvarchar(4000); der Standardwert ist NULL. Aktiviert die Überprüfung von Mergeartikeln, um eine Spaltenliste anzugeben, die berechnete Spalten und Timestampspalten ausschließt.

Rückgabecodewerte

Wenn Sie eine Prüfsumme überprüfen und die erwartete Prüfsumme mit der Prüfsumme in der Tabelle identisch ist, gibt sp_table_validation eine Meldung zurück, die besagt, dass die Tabelle die Überprüfung bestanden hat. Andernfalls wird eine Meldung zurückgegeben, die besagt, dass die Tabelle möglicherweise nicht mehr synchronisiert ist, und der Unterschied zwischen der erwarteten und der tatsächlichen Zeilenanzahl wird angezeigt.

Wenn Sie eine Zeilenanzahl überprüfen und die erwartete Zeilenanzahl mit der Zeilenanzahl in der Tabelle identisch ist, gibt sp_table_validation eine Meldung zurück, die besagt, dass die Tabelle die Überprüfung bestanden hat. Andernfalls wird eine Meldung zurückgegeben, die besagt, dass die Tabelle möglicherweise nicht mehr synchronisiert ist, und der Unterschied zwischen der erwarteten und der tatsächlichen Zeilenanzahl wird angezeigt.

Hinweise

sp_table_validation wird für alle Replikationstypen verwendet. sp_table_validation wird für Oracle-Verleger nicht unterstützt.

Der Prüfsummenalgorithmus berechnet eine zyklische 32-Bit-Redundanzprüfung (CRC, Redundancy Check) des gesamten Zeilenbilds auf der Seite. Er überprüft Spalten nicht selektiv und kann nicht für eine Sicht oder eine vertikale Partition der Tabelle ausgeführt werden. Außerdem lässt die Prüfsummenberechnung den Inhalt von text- und image-Spalten (entwurfsbedingt) aus.

Beim Ausführen einer Prüfsummenberechnung muss die Struktur der Tabelle auf den beiden Servern identisch sein. Das heißt, für die Tabellen müssen dieselben Spalten in derselben Reihenfolge vorhanden sein, dieselben Datentypen und Längen, und sie müssen dieselben NULL- bzw. NOT NULL-Bedingungen aufweisen. Wenn auf dem Verleger beispielsweise CREATE TABLE und dann ALTER TABLE zum Hinzufügen von Spalten ausgeführt wurden, aber das auf dem Abonnenten angewendete Skript ein einfaches CREATE für eine Tabelle darstellt, dann ist die Struktur nicht dieselbe. Wenn Sie nicht sicher sind, ob die Struktur der beiden Tabellen identisch ist, sollten Sie syscolumns überprüfen und sich davon überzeugen, dass der Offset für beide Tabellen identisch ist.

Gleitkommawerte erzeugen mit hoher Wahrscheinlichkeit Unterschiede in der Prüfsumme, falls bcp im Zeichenmodus verwendet wurde. Dies ist der Fall, wenn die Veröffentlichung nicht SQL Server-basierte Abonnenten besitzt. Diese Unterschiede sind durch geringfügige und unvermeidbare Genauigkeitsunterschiede bedingt, die auftreten, wenn Konvertierungen in den und aus dem Zeichenmodus durchgeführt werden.

Berechtigungen

Zum Ausführen von sp_table_validation müssen Sie über SELECT-Berechtigungen für die zu überprüfende Tabelle verfügen.