检查两个数据库里的表名、字段是否一致的一种方法

简介: 不知道大家有没有遇到过这种情况。 程序已经给客户安装上了,并且客户已经录入了一些信息,然后程序还需要作比较大的变动(修改功能、增加模块等),数据库就不可避免要做一些改动。 但是这时候已经不能把客户的数据库删掉,换上新的数据库了。

不知道大家有没有遇到过这种情况。
程序已经给客户安装上了,并且客户已经录入了一些信息,然后程序还需要作比较大的变动(修改功能、增加模块等),数据库就不可避免要做一些改动。
但是这时候已经不能把客户的数据库删掉,换上新的数据库了。只能用添表、添字段的方式了。

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

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

1、建立视图:
这个视图大家不太陌生吧,写过代码生成器的兄弟们都很熟悉吧。
他可以看到一个数据库里的表名、字段名、字段类型、和字段大小的信息。
建立两个这样的视图,一个读取客户的数据库,一个读取新的数据库。这样我们就有了两个数据库的表和字段的信息的列表了。

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

_Sys_Other_TableInfo

SELECT   TOP   100   PERCENT  obj.name  AS  TableName, col.name  AS  ColName, col.xtype, 
      col.length
FROM  新数据库.dbo.syscolumns col  INNER   JOIN
      新数据库.sysobjects obj 
ON  col.id  =  obj.id
ORDER   BY  obj.name

_Sys_TableInfo
SELECT   TOP   100   PERCENT  obj.name  AS  TableName, col.name  AS  ColName, col.xtype, 
      col.length
FROM  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、如果是修改表名或者是修改字段名、删除字段名就没有检查了。





相关文章
|
2月前
|
存储 关系型数据库 MySQL
mysql数据库查询时用到的分页方法有哪些
【8月更文挑战第16天】在MySQL中,实现分页的主要方法包括:1)使用`LIMIT`子句,简单直接但随页数增加性能下降;2)通过子查询优化`LIMIT`分页,提高大页码时的查询效率;3)利用存储过程封装分页逻辑,便于复用但需额外维护;4)借助MySQL变量实现,可能提供更好的性能但实现较复杂。这些方法各有优缺点,可根据实际需求选择适用方案。
173 2
|
19天前
|
消息中间件 关系型数据库 数据库
Python实时监测数据库表数据变化的方法
在实现时,需要考虑到应用的实时性需求、数据库性能影响以及网络延迟等因素,选择最适合的方法。每种方法都有其适用场景和限制,理解这些方法的原理和应用,将帮助开发者在实际项目中做出最合适的技术选择。
79 17
|
9天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
22 4
|
7天前
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
|
17天前
|
SQL 关系型数据库 MySQL
MySQL数据库中给表添加字段并设置备注的脚本编写
通过上述步骤,你可以在MySQL数据库中给表成功添加新字段并为其设置备注。这样的操作对于保持数据库结构的清晰和最新非常重要,同时也帮助团队成员理解数据模型的变化和字段的具体含义。在实际操作中,记得调整脚本以适应具体的数据库和表名称,以及字段的详细规范。
26 8
|
23天前
|
Oracle 安全 关系型数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法探讨
删除Oracle数据库数据一般有以下2种方式:delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法(不考虑全库备份和利用归档日志)。
|
18天前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
30 2
|
24天前
|
存储 测试技术 数据库
数据库备份方法
数据库备份方法
36 2
|
24天前
|
存储 测试技术 数据库
数据库备份的方法
数据库备份的方法
24 1
|
8天前
|
JSON 数据库 数据格式
数据库表如果有json字段,该怎么更新
数据库表如果有json字段,该怎么更新
下一篇
无影云桌面