一般來說,如何檢測兩張表的內容是否一致,體現在複製
的時候發布端和訂閱端的兩端的資料上面
我這裡羅列了一些如何從資料庫層面來解決此類問題的方法
第一步當然就是檢查記錄數
是否一致,否則不用想其他方法了~
這裡我們用兩張表t1_old,
t1_new
來演示方法介紹
方法一:老老實實看表結構和表記錄數,弊端是根本看不到兩張表的資料是否一致,只是看到表結構和記錄數是否一致
--方法二:加法去重 union 運算子排除重複的,但是有bug,在某些情形下不能簡單表示結果集一致,相當於無效表結構:
create
table
t1_old (
id intnot
null
, log_time
datetime
default
'') ;
create
table
t1_new (
id intnot
null
, log_time
datetime
default
'') ;
--兩表的記錄數都為100條。
select
count(*) from
t1_old;
select
count(*) from t1_new;
由於union 本身具備把上下兩條連線的記錄做唯一性排序,所以這樣檢測起來比較簡單
select兩表資料count(*
)from ( select
*from
[t1_old
]union
select
*from
[t1_new])
ast;
insert
into
[dbo
].[t1_new](
[id],[log_time])
values(1,''),(3,''),(4,''
)insert
into
[dbo
].[t1_old](
[id],[log_time])
values(1,''),(2,''),(3,''
)select
*from
[dbo
].[t1_new
]select
*from
[dbo
].[t1_old
]select
count(*
)from ( select
*from
[t1_new
]union
select
*from
[t1_old])
as t;
查詢出來的結果是4
方法三:except 減法歸零
這裡檢測出來結果不對,那麼就直接給出不一致的結論
方法四:用全表inner join,這個也是最爛的做法,當然這裡指的是在表記錄數超級多的情況下
declare方法五:借助sqlserver自帶的tablediff工具,當初微軟製作這個工具的目的就是用於比較複製中發布表和訂閱表的資料一致@t1_newcount
bigint
declare
@count
bigint
select
@t1_newcount
=count(*
)from
t1_new;
select
@count
=count(*
)from
[t1_old]as
a
inner
join
[t1_new
]as b on[b
].[id]=
[a].[id
]and[b
].[log_time]=
[a].[log_time]--
如果表中還有其他欄位的自行新增
@count
@t1_newcount
if ( @count
=@t1_newcount
)
begin
select
'equal
'end
else
begin
select
'not equal
'end
identical是相等的意思
方法六:借助發布端的驗證訂閱功能,驗證訂閱端跟發布端的資料是否一致
方法七:用checksum校驗,比較兩張表裡的內容的checksum值是否一致
但是這種方法也只侷限於兩表結構一摸一樣
我把[t1_new]表的資料複製到一張新的表以便進行比較
總結從上面幾種資料庫提供的方法來看,用except減法來歸零相對來說比較可靠,其他的方法比較適合在特定的情形下來檢測
SQLSERVER中如何快速比較兩張表的不一樣
不知不覺要寫2014年的最後一篇博文了 一般來說,如何檢測兩張表的內容是否一致,體現在複製的時候發布端和訂閱端的兩端的資料上面 我這裡羅列了一些如何從資料庫層面來解決此類問題的方法 第一步當然就是檢查記錄數是否一致,否則不用想其他方法了 這裡我們用兩張表t1 old,t1 new來演示 方法介紹 方...
SQLSERVER中如何快速比較兩張表的不一樣
一般來說,如何檢測兩張表的內容是否一致,體現在複製的時候發布端和訂閱端的兩端的資料上面 我這裡羅列了一些如何從資料庫層面來解決此類問題的方法 第一步當然就是檢查記錄數是否一致,否則不用想其他方法了 這裡我們用兩張表t1 old,t1 new來演示 方法介紹 方法一 老老實實看表結構和表記錄數,弊端是...
SQLSERVER中如何快速比較兩張表的不一樣
不知不覺要寫2014年的最後一篇博文了 一般來說,如何檢測兩張表的內容是否一致,體現在複製的時候發布端和訂閱端的兩端的資料上面 我這裡羅列了一些如何從資料庫層面來解決此類問題的方法 第一步當然就是檢查記錄數是否一致,否則不用想其他方法了 這裡我們用兩張表t1 old,t1 new來演示 方法介紹 方...