经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
sql server编写通用脚本自动检查两个不同服务器的新旧数据库的表结构差异
来源:cnblogs  作者:张工502219048  时间:2019/6/17 8:57:19  对本文有异议

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

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

脚本:

  1. /*
  2. 使用说明:Old数据库为DB_V1,New数据库为[localhost].DB_V2。根据实际需要批量替换数据库名称
  3. 脚本来源:https://www.cnblogs.com/zhang502219048/p/11028767.html
  4. */
  5.  
  6. -- sysobjects插入临时表
  7. select s.name + '.' + t.name as TableName, t.* into #tempTA
  8. from DB_V1.sys.tables t
  9. inner join DB_V1.sys.schemas s on s.schema_id = t.schema_id
  10. select s.name + '.' + t.name as TableName, t.* into #tempTB
  11. from [localhost].DB_V2.sys.tables t
  12. inner join [localhost].DB_V2.sys.schemas s on s.schema_id = t.schema_id
  13. -- syscolumns插入临时表
  14. select * into #tempCA from DB_V1.dbo.syscolumns
  15. select * into #tempCB from [localhost].DB_V2.dbo.syscolumns
  16. -- 第一个数据库表和字段
  17. select b.TableName as 表名, a.name as 字段名, a.length as 长度, c.name as 类型
  18. into #tempA
  19. from #tempCA a
  20. inner join #tempTA b on b.object_id = a.id
  21. inner join systypes c on c.xusertype = a.xusertype
  22. order by b.name
  23. -- 第二个数据库表和字段
  24. select b.TableName as 表名, a.name as 字段名, a.length as 长度, c.name as 类型
  25. into #tempB
  26. from #tempCB a
  27. inner join #tempTB b on b.object_id = a.id
  28. inner join systypes c on c.xusertype = a.xusertype
  29. order by b.name
  30. --删掉的字段
  31. select * from
  32. (
  33. select * from #tempA
  34. except
  35. select * from #tempB
  36. ) a;
  37. --增加的字段
  38. select * from
  39. (
  40. select * from #tempB
  41. except
  42. select * from #tempA
  43. ) a;
  44. --select * from #tempA
  45. --select * from #tempB
  46.  
  47. drop table #tempTA, #tempTB, #tempCA, #tempCB, #tempA, #tempB

示例旧数据库DB_V1:

示例新数据库DB_V2:

脚本运行结果:

结论:
从上面几个图可以看到,表和字段的差异部分就被自动检测到了。

【转载请注明博文来源:https://www.cnblogs.com/zhang502219048/p/11028767.html

原文链接:http://www.cnblogs.com/zhang502219048/p/11028767.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号