如何用SQL自动检查不同数据库中表的差异

简介: SQL数据库开发

问题描述:

工作过程中,不管是什么项目,伴随着项目不断升级版本,对应的项目数据库业务版本也不断升级,数据库出现新增表、修改表、删除表、新增字段、修改字段、删除字段等变化,如果人工检查,数据库表和字段比较多的话,工作量就非常大。


解决方案:
这里为大家分享一个在工作过程中编写的自动检查数据库表结构版本差异的通用脚本,只需要把新旧数据库名称批量替换成实际的名称就可以,支持通过链接服务器跨服务器检查不同服务器的两个数据库表结构差异。


具体脚本:

使用说明:Old数据库为SQL_Road1,New数据库为[localhost].SQL_Road2。根据实际需要批量替换数据库名称,其中[localhost]也可以改成远程数据库IP地址。

sys.objects插入临时表

SELECT
  s.name + '.' + t.name AS TableName,
  t.* INTO #tempTA
FROM
  SQL_Road1.sys.tables t
INNER JOIN SQL_Road1.sys.schemas s
ON s.schema_id = t.schema_id
SELECT
  s.name + '.' + t.name AS TableName,
  t.* INTO #tempTB
FROM
  [localhost].SQL_Road2.sys.tables t
INNER JOIN [localhost].SQL_Road2.sys.schemas s
ON s.schema_id = t.schema_id



sys.columns插入临时表

SELECT
  * INTO #tempCA
FROM
  SQL_Road1.dbo.syscolumns 
SELECT
  * INTO #tempCB
FROM
  [localhost].SQL_Road2.dbo.syscolumns



第一个数据库表和字段

SELECT
  b.TableName AS 表名,
  a.name AS 字段名,
  a.length AS 长度,
  c.name AS 类型 INTO #tempA
FROM
  #tempCA a
INNER JOIN #tempTA b ON b.object_id = a.id
INNER JOIN systypes c ON c.xusertype = a.xusertype
ORDER BY  b.name



第二个数据库表和字段

SELECT
  b.TableName AS 表名,
  a.name AS 字段名,
  a.length AS 长度,
  c.name AS 类型 INTO #tempB
FROM
  #tempCB a
INNER JOIN #tempTB b ON b.object_id = a.id
INNER JOIN systypes c ON c.xusertype = a.xusertype
ORDER BY  b.name



删掉的字段

SELECT  *
FROM
(
  SELECT  * FROM  #tempA
  EXCEPT
  SELECT  * FROM  #tempB
) a;



增加的字段

SELECT  * FROM
(
  SELECT  * FROM  #tempB
  EXCEPT
  SELECT  * FROM  #tempA
) a;



这样我们就将两个数据库中表结构的差异比对出来了,当然这一般在数据同步过程中可能才会用到。

相关文章
|
5月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
644 0
|
SQL 关系型数据库 MySQL
数据库基本概念(SQL,索引,视图,事务,日志等)(二)
数据库基本概念(SQL,索引,视图,事务,日志等)(二)
278 0
|
SQL 关系型数据库 MySQL
数据库基本概念(SQL,索引,视图,事务,日志等)(一)
数据库基本概念(SQL,索引,视图,事务,日志等)(一)
245 0
|
SQL 存储 XML
数据库视频第四章(sql server 2008数据类型、对于表的管理、规则的创建与删除)
数据库视频第四章(sql server 2008数据类型、对于表的管理、规则的创建与删除)
112 0
|
SQL 数据库
编写SQL为数据库某一字段添加外键约束
编写SQL为数据库某一字段添加外键约束
117 0
编写SQL为数据库某一字段添加外键约束
|
数据库 Python
Python编程:MySQLdb模块更新数据库获取影响行数
Python编程:MySQLdb模块更新数据库获取影响行数
236 0
|
SQL 数据库 Python
数据库实验基本表的创建、修改与删除(SQL语句
基本表的创建、修改与删除(SQL语句 实验要求 实验要求 实验名称:基本表的创建、修改与删除(SQL语句) 实验内容:使用 SQL 语句创建、修改及删除基本表
411 0