两个数据库表结构完全相同,要比较一下两数据库中相同表的所有数据(记录数,每条记录的值)是否相同。比如:有两个数据库A和B,结构完全相同。 比较一下A数据库下所有表中的数据是否和B数据库中所有表中的数据 完全相同。多谢!
解决方案 »
- 角色和架构应用场景的问题?
- 救命...我在安装sql server 群集的时候..在安装到输入域用户名和口令后就自己退出了..怎么回事
- 自建的跟踪 EXEC sp_trace_create,怎么才能停下来??!! 高手帮忙,100分送!!
- sql中的text类型字段如何输入大量的文字,如一篇文章??
- 查询最后插入的25条数据中是否存在一个指定的数据
- sql中如何将英文的单引号转化为中文的单引号?
- 谁能提供给我sql server 2000简体中文企业版给我?
- 错误21776 我删除master数据库中的表时候发生(null)集合中没有找到,如果该名称是合法名称,则使用[]来分割名称的不同部分,如图 大家帮我看看把
- 请教:临时表的生存周期!临时表什么时候才删除。
- 一个简单的问题,请大家帮忙!100分!!!
- 求一个超强的sql语句!!
- 在一表中想找出最新、次新、再次新三条记录,采用什么方法方便一些啊?请前辈指点!
sqldelta
查看數據就有點麻煩了,遊標循環SYS.OBJECTS 中的類別='U'再循環表中的列進行動態生成以下結構的語句進行查詢
select *from A JOIN B ON A.ID<>B.ID AND A.NAME<>B.NAME。。
當然這樣很慢的
期待高手出現
go
declare @sql varchar(max)
set @sql=''
select @sql=@sql+'if exists(select * from a..'+name+' where checksum(*) not in (select checksum(*) from '+name+')
union all
select * from '+name+' where checksum(*) not in (select checksum(*) from a..'+name+')) print '''+name+''''+char(13)
from sysobjects where type='u'
exec(@sql)
-- 1、先比较表名称和架构
--1.1
select name, schema_name(schema_id) [schema] from db1.sys.objects where type = 'U'
except
select name, schema_name(schema_id) [schema] from db2.sys.objects where type = 'U'
--1.2
select name, schema_name(schema_id) [schema] from db2.sys.objects where type = 'U'
except
select name, schema_name(schema_id) [schema] from db1.sys.objects where type = 'U'-- 2、比较记录数
select a.name, schema_name(a.schema_id) [schema], b.rows from db1.sys.objects a with(nolock) inner join db1.sys.partitions b with(nolock) on a.object_id = b.object_id where a.type = 'U' and b.index_id in (0, 1)
except
select a.name, schema_name(a.schema_id) [schema], b.rows from db2.sys.objects a with(nolock) inner join db2.sys.partitions b with(nolock) on a.object_id = b.object_id where a.type = 'U' and b.index_id in (0, 1)-- 3、如果上面都同就只能每个表去except了。
这是我想出来的笨办法,不知道2楼所说的 sqldelta 工具是怎么实现的。
--比较一个表,比如users表:
if exists(select * from a..users where checksum(*) not in (select checksum(*) from users)
union all
select * from users where checksum(*) not in (select checksum(*) from a..users))
print 'users'--上面就根据对象表来生成一批这样的语句即可
微软自带的工具
在TOOLS下。
我以前看到过的好像是在www.codeproject.com 里面有的。
SELECT * FROM A WHERE NOT EXISTS(SELECT * FROM B)SELECT * FROM B WHERE NOT EXISTS(SELECT * FROM A)