比较两个的表结构差异
2008-04-27 15:31
211 查看
/*--比较两个数据库的表结构差异
--*/
/*--调用示例
execp_comparestructure'xzkh_model','xzkh_new'
--*/
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_comparestructure]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[p_comparestructure]
GO
createprocp_comparestructure
@dbname1varchar(250), --要比较的数据库名1
@dbname2varchar(250) --要比较的数据库名2
as
createtable#tb1(表名1varchar(250),字段名varchar(250),序号int,标识bit,主键bit,类型varchar(250),
占用字节数int,长度int,小数位数int,允许空bit,默认值varchar(500),字段说明varchar(500))
createtable#tb2(表名2varchar(250),字段名varchar(250),序号int,标识bit,主键bit,类型varchar(250),
占用字节数int,长度int,小数位数int,允许空bit,默认值varchar(500),字段说明varchar(500))
--得到数据库1的结构
exec('insertinto#tb1SELECT
表名=d.name,字段名=a.name,序号=a.colid,
标识=casewhena.status=0x80then1else0end,
主键=casewhenexists(SELECT1FROM'+@dbname1+'..sysobjectswherextype=''PK''andnamein(
SELECTnameFROM'+@dbname1+'..sysindexesWHEREindidin(
SELECTindidFROM'+@dbname1+'..sysindexkeysWHEREid=a.idANDcolid=a.colid
)))then1else0end,
类型=b.name, 占用字节数=a.length,长度=a.prec,小数位数=a.scale, 允许空=a.isnullable,
默认值=isnull(e.text,''''''),字段说明=isnull(g.[value],'''''')
FROM'+@dbname1+'..syscolumnsa
leftjoin'+@dbname1+'..systypesbona.xtype=b.xusertype
innerjoin'+@dbname1+'..sysobjectsdona.id=d.id andd.xtype=''U''and d.name<>''dtproperties''
leftjoin'+@dbname1+'..syscommentseona.cdefault=e.id
leftjoin'+@dbname1+'..syspropertiesgona.id=g.idanda.colid=g.smallid
orderbya.id,a.colorder')
--得到数据库2的结构
exec('insertinto#tb2SELECT
表名=d.name,字段名=a.name,序号=a.colid,
标识=casewhena.status=0x80then1else0end,
主键=casewhenexists(SELECT1FROM'+@dbname2+'..sysobjectswherextype=''PK''andnamein(
SELECTnameFROM'+@dbname2+'..sysindexesWHEREindidin(
SELECTindidFROM'+@dbname2+'..sysindexkeysWHEREid=a.idANDcolid=a.colid
)))then1else0end,
类型=b.name, 占用字节数=a.length,长度=a.prec,小数位数=a.scale, 允许空=a.isnullable,
默认值=isnull(e.text,''''''),字段说明=isnull(g.[value],'''''')
FROM'+@dbname2+'..syscolumnsa
leftjoin'+@dbname2+'..systypesbona.xtype=b.xusertype
innerjoin'+@dbname2+'..sysobjectsdona.id=d.id andd.xtype=''U''and d.name<>''dtproperties''
leftjoin'+@dbname2+'..syscommentseona.cdefault=e.id
leftjoin'+@dbname2+'..syspropertiesgona.id=g.idanda.colid=g.smallid
orderbya.id,a.colorder')
--andnotexists(select1from#tb2where表名2=a.表名1)
select比较结果=casewhena.表名1isnullandb.序号=1then'库1缺少表:'+b.表名2
whenb.表名2isnullanda.序号=1then'库2缺少表:'+a.表名11
--*/
/*--调用示例
execp_comparestructure'xzkh_model','xzkh_new'
--*/
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_comparestructure]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[p_comparestructure]
GO
createprocp_comparestructure
@dbname1varchar(250), --要比较的数据库名1
@dbname2varchar(250) --要比较的数据库名2
as
createtable#tb1(表名1varchar(250),字段名varchar(250),序号int,标识bit,主键bit,类型varchar(250),
占用字节数int,长度int,小数位数int,允许空bit,默认值varchar(500),字段说明varchar(500))
createtable#tb2(表名2varchar(250),字段名varchar(250),序号int,标识bit,主键bit,类型varchar(250),
占用字节数int,长度int,小数位数int,允许空bit,默认值varchar(500),字段说明varchar(500))
--得到数据库1的结构
exec('insertinto#tb1SELECT
表名=d.name,字段名=a.name,序号=a.colid,
标识=casewhena.status=0x80then1else0end,
主键=casewhenexists(SELECT1FROM'+@dbname1+'..sysobjectswherextype=''PK''andnamein(
SELECTnameFROM'+@dbname1+'..sysindexesWHEREindidin(
SELECTindidFROM'+@dbname1+'..sysindexkeysWHEREid=a.idANDcolid=a.colid
)))then1else0end,
类型=b.name, 占用字节数=a.length,长度=a.prec,小数位数=a.scale, 允许空=a.isnullable,
默认值=isnull(e.text,''''''),字段说明=isnull(g.[value],'''''')
FROM'+@dbname1+'..syscolumnsa
leftjoin'+@dbname1+'..systypesbona.xtype=b.xusertype
innerjoin'+@dbname1+'..sysobjectsdona.id=d.id andd.xtype=''U''and d.name<>''dtproperties''
leftjoin'+@dbname1+'..syscommentseona.cdefault=e.id
leftjoin'+@dbname1+'..syspropertiesgona.id=g.idanda.colid=g.smallid
orderbya.id,a.colorder')
--得到数据库2的结构
exec('insertinto#tb2SELECT
表名=d.name,字段名=a.name,序号=a.colid,
标识=casewhena.status=0x80then1else0end,
主键=casewhenexists(SELECT1FROM'+@dbname2+'..sysobjectswherextype=''PK''andnamein(
SELECTnameFROM'+@dbname2+'..sysindexesWHEREindidin(
SELECTindidFROM'+@dbname2+'..sysindexkeysWHEREid=a.idANDcolid=a.colid
)))then1else0end,
类型=b.name, 占用字节数=a.length,长度=a.prec,小数位数=a.scale, 允许空=a.isnullable,
默认值=isnull(e.text,''''''),字段说明=isnull(g.[value],'''''')
FROM'+@dbname2+'..syscolumnsa
leftjoin'+@dbname2+'..systypesbona.xtype=b.xusertype
innerjoin'+@dbname2+'..sysobjectsdona.id=d.id andd.xtype=''U''and d.name<>''dtproperties''
leftjoin'+@dbname2+'..syscommentseona.cdefault=e.id
leftjoin'+@dbname2+'..syspropertiesgona.id=g.idanda.colid=g.smallid
orderbya.id,a.colorder')
--andnotexists(select1from#tb2where表名2=a.表名1)
select比较结果=casewhena.表名1isnullandb.序号=1then'库1缺少表:'+b.表名2
whenb.表名2isnullanda.序号=1then'库2缺少表:'+a.表名11
相关文章推荐
- 用php脚本比较MySQL两个数据库的结构差异
- 比较两个数据库的表结构差异
- 比较两个mysql数据库表结构的差异
- 两个数据库比较 对比视图存储过程及表结构差异
- 两个数据库比较 对比视图存储过程及表结构差异
- 比较两个数据库的表结构差异
- 比较两个数据库表结构的差异
- 比较两个数据库的表结构差异
- PHP脚本快速比较两个mysql表结构的差异
- 比较两个数据库的表结构差异
- 比较两个数据库的表结构差异(ZT)
- 比较两个数据库的表结构差异
- 比较两个数据库的表结构差异
- 比较两个数据库的表结构差异
- 转:邹建--比较两个数据库的表结构差异
- 转:邹建--比较两个数据库的表结构差异2
- 比较两个数据库的表结构差异
- 比较两个mysql数据库表结构的差异
- (转载) 两个数据库比较 对比视图存储过程及表结构差异
- 比较两个数据库的表结构差异