如何解决比较两个数据库中的过程定义
我们有一个Sql Server 2012实例, 在实例中,我们有2个分别称为A和B的数据库(假定A为生产DB,B为开发DB,B是数据库A的精确副本)
假设出于开发目的,在数据库B中更改了某些过程(已经存在,尚未创建)的定义,但在数据库A(生产数据库)中没有更改。
为了找到定义不同的过程,我想出了以下情况,但问题是我不是100%确保这种情况每次都能奏效。 因此,请就此提出您的想法。
场景
临时表1(A_PROCEDURE)-要保留数据库A中存在的所有过程名称和定义(从数据库A执行)
select * into A_PROCEDURE FROM (
Select routine_name,routine_definition from INFORMATION_SCHEMA.ROUTINES ) DTL;
现在从数据库B中执行以下查询以查找过程定义中不相同的所有过程
SELECT T.ROUTINE_NAME B_PROC,L.ROUTINE_NAME A_PROC,T.ROUTINE_DEFINITION B_PROC_DEF,L.ROUTINE_DEFINITION A_PROC_DEF
FROM INFORMATION_SCHEMA.ROUTINES T JOIN A.DBO.A_PROCEDURE L ON T.ROUTINE_NAME = L.ROUTINE_NAME
AND T.ROUTINE_DEFINITION <> L.ROUTINE_DEFINITION;
在上述查询中,我找到了名称相同但定义不同的过程(正确的是逐行手动检查)。
这是正确的方法吗?还应该考虑其他吗?请就此分享您的想法
感谢和最好的问候, Vishnudas
解决方法
您好,Vishnudas:您需要sp_HelpText
系统存储过程。该实用程序将每个存储过程的定义存储在SQL Server数据库引擎中。
每个DBA或开发人员都应该使用比较工具。同时,您可以检查this blog,在哪里可以编写不带统计信息的脚本来进行两个存储过程的内联比较。在那里,您可以获得有关sp_HelpText
用法的说明。
但是,我建议使用一些大中型公司的生产团队使用的比较工具,例如SQL Compare tool。一个有用的top list is recommended,并且已由其他同行进行了审核。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。