Geo*_*ton 14 t-sql sql-server synchronization
SQL大师 -
我们的架构由多个客户数据库和一个公共代码库组成.部署数据库更改时,必须在每个数据库中运行脚本.
由于部署问题,有时候我们的存储过程变得彼此不同步.我想创建一个脚本来返回这些匹配的程序,以确保我们在部署后同步数据库的副本.
是否可以比较两个或多个数据库,让脚本查看两个数据库之间的所有过程,并返回不匹配?
有效的东西:
DATABASE_1 | DATABASE_2 | MISMATCHED_PROCEDURE | DATABASE_1_MODIFY_DATE | DATABASE_2_MODIFY_DATE
Customer_1 | Customer_2 | sp_get_names | 1/1/2010 | 1/2/2010
Customer_1 | Customer_2 | sp_add_person | 1/5/2010 | 1/6/2010
Run Code Online (Sandbox Code Playgroud)
作为奖励,是否可以让脚本通过将最新脚本应用于过时脚本来自动同步数据库?
非常感谢!
Ran*_*der 19
有很多工具可以做到这一点.其中最好的是Red-Gate SQL Compare.另一个非常好的替代方法是使用Visual Studio Database Professional来管理数据库模式.除此之外,它将做非常好的架构比较.
SQL*_*ace 11
如果您没有针对DB架构师的SQL Compare或Visual Studio团队系统(Data Dude)...请使用此... SQL 2005及更高版本
select t1.name,t1.modify_date,t2.modify_date
from Database1.sys.procedures t1
join Database2.sys.procedures t2 on t1.name = t2.name
and object_definition(t1.object_id) <> object_definition(t2.object_id)
Run Code Online (Sandbox Code Playgroud)
小智 11
您可以使用下面的脚本识别哪些过程(以及稍作修改的其他对象)是不同的.
要同步数据库,您可能需要尝试ApexSQL Diff.它与Red Gate的SQL Compare类似.
select S1.name [Db1_Schema], O1.name as [Db1_Object], O1.modify_date,
S2.name [Db1_Schema], O2.name as [Db1_Object], O2.modify_date
from database.sys.all_objects O1
inner join database2.sys.all_objects O2 on O1.name = O2.name
inner join database.sys.syscomments C1 on O1.object_id = C1.id
inner join database2.sys.syscomments C2 on O2.object_id = C2.id
inner join database.sys.schemas S1 on O1.schema_id = S1.schema_id
inner join database2.sys.schemas S2 on O2.schema_id = S2.schema_id
where C1.text <> C2.text and
-- remove the line below if you want to search all objects
O1.type = 'P'
Run Code Online (Sandbox Code Playgroud)