比较数据库可以通过以下方式:
比较的数据库分别称为“源”和“目标”。说明:数据库项目不包含任何数据。因此,在数据比较中数据库项目不能作为源或目标。
比较数据时,会生成数据 *** 作语言 (DML) 脚本,使用该脚本可以通过更新目标数据库中的某些或全部数据来同步不同的数据库。完成数据比较后,结果会出现在 Visual Studio 的“数据比较”窗口中。有关更多信息,请参见比较数据库数据概述。说明:还可以比较两个数据库的架构或同一数据库的两个版本的架构。
比较两个数据库的架构。比较数据库数据比较两个数据库的数据在“数据”菜单上指向“数据比较”,然后单击“新建数据比较”。将出现“数据比较”向导。而且,会打开“数据比较”窗口,并且 Visual Studio 会自动为其指定一个名称,如 DataCompare1。在“数据比较”向导中,确定源数据库和目标数据库。如果“源数据库”列表或“目标数据库”列表为空,请单击“新建连接”。在“连接属性”对话框中,确定数据库所驻留的服务器以及连接数据库时将要使用的身份验证类型。然后,单击“确定”关闭“连接属性”对话框并返回到“数据比较”向导。在“数据比较”向导的第一页上,验证每个数据库的信息均是正确的,指定要在结果中包括的记录,然后单击“下一页”。“数据比较”向导的第二页将出现并显示数据库中表和视图的层次结构列表。说明:表和视图必须满足两个条件才会出现在列表中。第一个条件是,源数据库对象和目标数据库对象的架构必须匹配。第二个条件是,该列表中仅显示具有主键或唯一键的表和视图。
还可以更新目标数据库中的部分或全部数据,以与源数据库中的数据匹配。有关更多信息,请参见如何:查看数据差异和如何:同步数据库数据。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。
数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
构建两个临时表,将两个数据库结构信息导入。create Table #t1
(
ID Int Identity(1,1) Not Null Primary Key,
tablename nvarchar(50) NULL,
columnName nvarchar(50) NULL,
columnIndex int null,
columnType nvarchar(50) NULL
)
use 数据库1
insert into #t1
create Table #t2
(
ID Int Identity(1,1) Not Null Primary Key,
tablename nvarchar(50) NULL,
columnName nvarchar(50) NULL,
columnIndex int null,
columnType nvarchar(50) NULL
)
//开始比较
use 数据库2
insert into #t2
SELECT
SO.name as '表名',
SC.name as '表列名',
SC.colid as '索引',
ST.name as '类型'
FROM
sysobjects SO, -- 对象表
syscolumns SC, -- 列名表
systypes ST -- 数据类型表
WHERE
SO.id = SC.id
AND SO.xtype = 'U'-- 类型U表示表,V表示视图
AND SO.status >= 0 --加一个条件:SO.status >= 0,否则会将系统的临时表显示出来
AND SC.xtype = ST.xusertype
ORDER BY
SO.name, SC.colorder
go
//查询出 在t1 里有, t2 里没有的字段,查询列出来。
select * from
(
select tablename,columnName,columnType from #t1 where tablename like '%EMS_%'
EXCEPT
select tablename,columnName,columnType from #t2 where tablename like '%EMS_%'
) as c
order by tablename
比较两个数据库中表和字段的差异
-- 比较两个数据库中表的差异
-- u表,p存储过程,v视图
-- INTFSIMSNEW新库,INTFSIMS旧库
SELECT NTABLE = A.NAME, OTABLE = B.NAME
FROM INTFSIMSNEW..SYSOBJECTS A
LEFT JOIN INTFSIMS..SYSOBJECTS B
ON A.NAME = B.NAME
WHERE ISNULL(B.NAME, '') = ''
AND A.XTYPE = 'U'
UNION ALL
SELECT NTABLE = B.NAME, OTABLE = A.NAME
FROM INTFSIMS..SYSOBJECTS A
LEFT JOIN INTFSIMSNEW..SYSOBJECTS B
ON A.NAME = B.NAME
WHERE ISNULL(B.NAME, '') = ''
AND A.XTYPE = 'U'
ORDER BY 1, 2
-- 比较两个数据库中每个表字段的差异
SELECT
表名A = CASE WHEN ISNULL(A.TABLENAME, '') <>'' THEN A.TABLENAME ELSE B.TABLENAME END,
字段名A = A.FIELDNAME,
字段名B = B.FIELDNAME,
顺序= A.FIELDSNO,
说明= CASE WHEN A.FIELDTYPE <>B.FIELDTYPE THEN '类型: ' + A.FIELDTYPE + '-->' + B.FIELDTYPE
WHEN A.FIELDSNO <>B.FIELDSNO THEN '顺序: ' + str(A.FIELDSNO) + '-->' + str(B.FIELDSNO)
WHEN A.LENGTH <>B.LENGTH THEN '长度: ' + str(A.LENGTH) + '-->' + str(B.LENGTH)
WHEN A.LENSEC <>B.LENSEC THEN '小数位: ' + str(A.LENSEC) + '-->' + str(B.LENSEC)
WHEN A.ALLOWNULL <>B.ALLOWNULL THEN '允许空值: ' + str(A.ALLOWNULL) + '-->' + str(B.ALLOWNULL)
END
FROM (SELECT
TABLENAME = B.NAME,
FIELDNAME = A.NAME,
FIELDSNO = A.COLID,
FIELDTYPE = C.NAME,
LENGTH = A.LENGTH,
LENSEC = A.XSCALE,
ALLOWNULL = A.ISNULLABLE
FROM INTFSIMSNEW..SYSCOLUMNS A
LEFT JOIN INTFSIMSNEW..SYSOBJECTS B
ON A.ID = B.ID
LEFT JOIN INTFSIMSNEW..SYSTYPES C
ON A.XUSERTYPE = C.XUSERTYPE
WHERE B.XTYPE = 'U') A
FULL JOIN (SELECT
TABLENAME = B.NAME,
FIELDNAME = A.NAME,
FIELDSNO = A.COLID,
FIELDTYPE = C.NAME,
LENGTH = A.LENGTH,
LENSEC = A.XSCALE,
ALLOWNULL = A.ISNULLABLE
FROM INTFSIMS..SYSCOLUMNS A
LEFT JOIN INTFSIMS..SYSOBJECTS B
ON A.ID = B.ID
LEFT JOIN INTFSIMS..SYSTYPES C
ON A.XUSERTYPE = C.XUSERTYPE
WHERE B.XTYPE = 'U') B
ON A.TABLENAME = B.TABLENAME
AND A.FIELDNAME = B.FIELDNAME
WHERE ISNULL(A.TABLENAME, '') = ''
OR ISNULL(B.TABLENAME, '') = ''
OR A.FIELDTYPE <>B.FIELDTYPE
OR A.FIELDSNO <>B.FIELDSNO
OR A.LENGTH <>B.LENGTH
OR A.LENSEC <>B.LENSEC
OR A.ALLOWNULL <>B.ALLOWNULL
ORDER by 1, 4
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)