首页 / MSSQL / SQL Server 比对数据差异
SQL Server 比对数据差异
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQL Server 比对数据差异,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3251字,纯文字阅读大概需要5分钟。
内容图文
![SQL Server 比对数据差异](/upload/InfoBanner/zyjiaocheng/458/21b3584832dc42fba45454b05915d17d.jpg)
做数据迁移或者复制时,有时需要验证目标表和源表之间的数据差异。下面我们就介绍几种验证数据差异的方法:
1.两个表连接查询,对比每一列的值
Declare @vSQL varchar(max) Declare @vCols varchar(max) Create Table vTable1 (id int, StudentID int, Dept varchar(10),BookID int) Create Table vTable2 (id int, StudentID int, Dept varchar(10),BookID int) Insert into vTable1 Select 1,123,‘CS‘,465 Union All Select 2,123,‘CS‘,345 Union All Select 3,223,‘TE‘,190 Insert into vTable2 Select 1,123,‘CS‘,465 Union All Select 2,223,‘TE‘,345 Union All Select 3,223,‘TE‘,190 -- Get the column names from schema with case statements to get 0 or 1 as result -- Now, this will depend upon the columns of your actual tables -- Data approach Select @vCols = Stuff((Select ‘,case when a.‘ + [name] + ‘ = b.‘ + [name] + ‘ then Cast(b.‘ + [name]+‘ as varchar(10)) else cast(b.‘ + [name] + ‘ as varchar(max)) + ‘‘(old)‘‘ + ‘‘ ‘‘ + Cast(a.‘ + [name] + ‘ as varchar(10)) + ‘‘(new)‘‘ end as ‘ + [name] from sys.columns where Object_id = Object_id(‘vTable1‘) for XML Path(‘‘)),1,1,‘‘) -- Concatenate the @vCols with main sql Set @vSQL = ‘ Select a.id,‘ + @vCols + ‘ From vTable1 a Inner Join vTable2 b on b.ID = a.ID ‘ Print @vSQL Exec (@vSQL) --Flag approach Select @vCols = Stuff((Select ‘,case when a.‘ + [name] + ‘ = b.‘ + [name] + ‘ then 1 else 0 end as ‘ + [name] from sys.columns where Object_id = Object_id(‘vTable1‘) for XML Path(‘‘)),1,1,‘‘) Set @vSQL = ‘ Select a.id,‘ + @vCols + ‘ From vTable1 a Inner Join vTable2 b on b.ID = a.ID ‘ Print @vSQL Exec (@vSQL) Drop table vTable1 Drop table vTable2
2.对比两个表的总行数
Select count(1) from table_a
select count(1) from table_b
如果表上有时间字段,用这个方式去对比也是OK的,这种方法只能看总行数是否一致。
3. 用微软提供的tablediff 工具
先对比两个数据一样的表
truncate table FunctionMenu_t
insert into FunctionMenu_t
select * from dbo.FunctionMenu
再对比数据不一样的表
update top(1) FunctionMenu_t set Id =‘aaaa‘
对比结果给出了两个表之间的不同。
4. 用复制工具验证数据一致性
---------------------------------------------
Tablediff参数
tablediff [ -? ] | { -sourceserver source_server_name[\instance_name] -sourcedatabase source_database -sourcetable source_table_name [ -sourceschema source_schema_name ] [ -sourcepassword source_password ] [ -sourceuser source_login ] [ -sourcelocked ] -destinationserver destination_server_name[\instance_name] -destinationdatabase subscription_database -destinationtable destination_table [ -destinationschema destination_schema_name ] [ -destinationpassword destination_password ] [ -destinationuser destination_login ] [ -destinationlocked ] [ -b large_object_bytes ] [ -bf number_of_statements ] [ -c ] [ -dt ] [ -et table_name ] [ -f [ file_name ] ] [ -o output_file_name ] [ -q ] [ -rc number_of_retries ] [ -ri retry_interval ] [ -strict ] [ -t connection_timeouts ] }
-c 对比列
-b 大数据类型要对比的字节数,任何大于此值的大数据类型列都不会对比
-o 输出文件的完整路径和名称。
-q 只进行行数和架构的比较。
SQL Server 比对数据差异
标签:
本文系统来源:http://www.cnblogs.com/alexwu/p/4872464.html
内容总结
以上是互联网集市为您收集整理的SQL Server 比对数据差异全部内容,希望文章能够帮你解决SQL Server 比对数据差异所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。