sp_table_validation (Transact-SQL)
傳回資料表或索引檢視的資料列計數或總和檢查碼資訊,或利用指定的資料表或索引檢視來比較提供的資料列計數或總和檢查碼資訊。 這個預存程序執行於發行集資料庫的發行者端,以及訂閱資料庫的訂閱者端。 不支援 Oracle 發行者使用這個值。
語法
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' ]
引數
[ @table=] 'table'
這是資料表的名稱。 table 是 sysname,沒有預設值。[ @expected_rowcount=] expected_rowcountOUTPUT
指定是否傳回資料表中的預期資料列數。 expected_rowcount 是 int,預設值是 NULL。 如果是 NULL,就會在輸出參數中傳回實際的資料列計數。 如果提供了值,就會針對實際資料列計數來檢查值,以識別任何差異。[ @expected_checksum=] expected_checksumOUTPUT
指定是否要傳回資料表中的預期總和檢查碼。 expected_checksum 是 numeric,預設值是 NULL。 如果是 NULL,就會在輸出參數中傳回實際的總和檢查碼。 如果提供了值,就會針對實際總和檢查碼來檢查值,以識別任何差異。[ @rowcount_only=] type_of_check_requested
指定要執行的總和檢查碼或資料列計數類型。 type_of_check_requested 是 smallint,預設值是 1。如果是 0,則執行資料列計數和 Microsoft SQL Server 7.0 相容總和檢查碼。
如果是 1,則只執行資料列計數檢查。
如果是 2,則執行資料列計數和二進位總和檢查碼。
[ @owner=] 'owner'
這是資料表擁有者的名稱。 owner 是 sysname,預設值是 NULL。[ @full_or_fast=] full_or_fast
這是用於計算資料列計數的方法。 full_or_fast 是 tinyint,預設值是 2,而且可以是下列其中一個值。值
說明
0
利用 COUNT(*) 執行完整計數。
1
從 sysindexes.rows 執行快速計數。 計算 sysindexes 中的資料列,比計算實際資料表中的資料列快。 不過,由於 sysindexes 是以延遲的方式更新,因此,資料列計數可能會不準確。
2 (預設值)
先嘗試快速方法來執行條件式快速計數。 如果快速方法有不同結果,便轉換成完整方法。 如果 expected_rowcount 是 NULL,且利用這個預存程序來取得值,就一律會使用完整的 COUNT(*)。
[ @shutdown_agent=] shutdown_agent
如果散發代理程式在執行 sp_table_validation,便指定在驗證完成時,是否應該立即關閉散發代理程式。 shutdown_agent 是 bit,預設值是 0。 如果是 0,複寫代理程式便不會關閉。 如果是 1,會產生 20578 錯誤,並向複寫代理程式發出關閉的信號。 當使用者直接執行 sp_table_validation 時,會忽略這個參數。[ @table_name =] table_name
這是輸出訊息所用之檢視的資料表名稱。 table_name 是 sysname,預設值是 @table。[ @column_list= ] 'column_list'
這是總和檢查碼函數所應使用之資料行的清單。 column_list 是 nvarchar(4000),預設值是 NULL。 啟用合併發行項驗證來指定排除計算和時間戳記資料行的資料行清單。
傳回碼值
如果執行總和檢查碼驗證,且預期的總和檢查碼等於資料表中的總和檢查碼,sp_table_validation 會傳回資料表通過總和檢查碼驗證的訊息。 否則,它會傳回一則訊息來說明資料表可能不會同步處理,且會報告預期資料列數和實際資料列數的差異。
如果執行資料列計數驗證,且預期的資料列計數等於資料表中的資料列計數,sp_table_validation 會傳回資料表通過資料列計數驗證的訊息。 否則,它會傳回一則訊息來說明資料表可能不會同步處理,且會報告預期資料列數和實際資料列數的差異。
備註
sp_table_validation 用於所有類型的複寫中。 不支援 Oracle 發行者使用 sp_table_validation。
總和檢查碼會在頁面的整個資料列影像上,計算 32 位元的循環冗餘檢查 (CRC)。 它不會選擇性地檢查資料行,也不會處理資料表的檢視或垂直資料分割。 另外,總和檢查碼也會略過 text 和 image 資料行的內容 (符合設計)。
當執行總和檢查碼時,兩部伺服器的資料表結構必須相同;也就是說,資料表必須有相同順序、資料類型和長度,以及 NULL/NOT NULL 狀況的相同資料行。 例如,如果發行者執行 CREATE TABLE,再執行 ALTER TABLE 來加入資料行,但訂閱者端所套用的指令碼是簡單 CREATE 資料表,結構就不同。 如果您不確定兩份資料表的結構是否相同,請查看 syscolumns,並確認兩份資料表中的位移相同。
如果使用字元模式的 bcp,也就是發行集有非 SQL Server 訂閱者時,浮點數值可能會產生總和檢查碼差異。 這些是在轉換成字元模式,或從字元模式轉換時,因有效位數的次要和無法避免的差異所造成的。
權限
若要執行 sp_table_validation,您必須有所驗證之資料表的 SELECT 權限。
請參閱
參考
sp_article_validation (Transact-SQL)