欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏数据库 → 正文
检查两个数据库里的表名、字段是否一致的一种方法
08-02-18 14:01:46 作者: 出处:

程序已经给客户安装上了,并且客户已经录入了一些信息,然后程序还需要作比较大的变动(修改功能、增加模块等),数据库就不可避免要做一些改动。

但是这时候已经不能把客户的数据库删掉,换上新的数据库了。只能用添表、添字段的方式了。

如果修改程序的时候做了详细的文档的话,那么就可以按照文档来修改数据库了,但是如果没有文档,或者文档记录的不全,或者修改完成之后想检查一下有没有 漏网之鱼 。那么这时候应该怎么办呢?难道要一个一个的检查?!

我们可以使用两个视图和几个 SQL语句来检查一下。

1 、建立视图:

这个视图大家不太陌生吧,写过代码生成器的兄弟们都很熟悉吧。

他可以看到一个数据库里的表名、字段名、字段类型、和字段大小的信息。

建立两个这样的视图,一个读取客户的数据库,一个读取新的数据库。这样我们就有了两个数据库的表和字段的信息的列表了。

对了还有一个前提:把新的数据附加到客户的服务器上去。然后才行。

_Sys_Other_TableInfo

_Sys_TableInfo

SELECT TOP  100 PERCENT obj.name AS TableName, col.name AS ColName, col.xtype,col.lengthFROM dbo.syscolumns col INNER JOIN

sysobjects obj ON col.id = obj.id

ORDER BY obj.name

2 、执行查询语句

我们可以使用 not in 的方式来检查表名是否一致。

select * from __Sys_other_TableInfo

where tablename not in (select tablename from _Sys_TableInfo )

执行之后会显示客户的数据库里缺少的表的名字和表里的字段。

表一致了之后,我们开始来检查字段名称。

select * from _Sys_other_TableInfo bb

where colname not in (select colname from _Sys_TableInfo aa where aa.tablename = bb.tablename)

执行之后会显示客户的数据库里没有的字段的名称。当然是在表名一致的前提下才能进行字段的对比。

3 、下面就是对照字段类型,然后字段的大小。

需要的 SQL语句我还没有写出来。估计不是太难吧。

这种方法已经在我的一个项目里试验了一下,基本是正确的。

4 、不过还是发现了几个问题。

1 、缺少表的话可以使用企业管理器来自动生成键表语句,但是添加字段就有一点麻烦了。不知道大家有没有什么好的办法。

2 、不光是检查表,还可以检查视图和存储过程(自定义函数能不能检查到还没有测试)。不过对于视图和存储过程只能得知名称和字段、参数是否一致,如果参数没有变化,只是修改了一下内容的话就检查不出来了。

3 、如果是修改表名或者是修改字段名、删除字段名就没有检查了。

SELECT TOP  100 PERCENT obj.name AS TableName, col.name AS ColName, col.xtype,col.lengthFROM  新数据库 .dbo.syscolumns col INNER JOIN

新数据库 .sysobjects obj ON col.id = obj.id  

ORDER BY obj.name  

 

新数据库 .sysobjects obj ON col.id = obj.id  

ORDER BY obj.name  

 


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    无相关新闻

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号