我有914个存储过程,我需要在两个数据库之间进行混洗。
Server1上62个不在Server2上的存储过程,以及Server2上不在Server1上的790。
我确切地知道缺少哪些存储过程,因为我运行此查询来查找它们:
DECLARE @Routine varchar (20) = 'Procedure' --'Function'
--,@What VARCHAR(200) = '%Survey%'
select SPECIFIC_CATALOG
,SPECIFIC_NAME
,SPECIFIC_SCHEMA
--,@@servername AS [Server Name]
,'[Server1]' AS [Server Name]
,ROUTINE_TYPE
,ROUTINE_DEFINITION
,CREATED
,LAST_ALTERED
from [Server1].Database1.information_schema.routines
where routine_type = @Routine
--AND SPECIFIC_NAME LIKE @What
AND specific_name NOT IN (SELECT SPECIFIC_NAME
from [Server2.Database1.information_schema.routines
where routine_type = @Routine
--AND SPECIFIC_NAME LIKE @What
)
UNION all
select SPECIFIC_CATALOG
,SPECIFIC_NAME
,SPECIFIC_SCHEMA
--,@@servername AS [Server Name]
,'[Server2]' AS [Server Name]
,ROUTINE_TYPE
,ROUTINE_DEFINITION
,CREATED
,LAST_ALTERED
from [Server2].Database1.information_schema.routines
where routine_type = @Routine
--AND SPECIFIC_NAME LIKE @What
AND specific_name NOT IN (SELECT SPECIFIC_NAME
from [Server1].Database1.information_schema.routines
where routine_type = @Routine
--AND SPECIFIC_NAME LIKE @What
)
有没有办法修改它以获取结果集并让它自动将存储过程移动到它们不是的服务器?
我不需要在Server1或Server2上迁移“每个”存储过程,只需要丢失那些存储过程。
答案 0 :(得分:0)
您应该能够在SQL Server 2008附带的Visual Studio IDE中创建SQL Server数据库项目
创建项目和连接后,可以进行数据库比较。
当比较完成后,它会显示数据库中的差异,并且默认情况下已经预先设置执行以希望复制从一个到另一个中丢失的内容,以及是否有您不想要的内容,您实际上可以选择一个复选框,您希望将其复制并执行到T.只需确保告诉比较选项您只关心对象,而不是登录,以及其他可能的结果。 SQL Server。
这就是我在你的情况下会做的事情。虽然使用T-SQL也不是不可能的。我只回答这个问题,因为这个选项和Visual Studio IDE确实安装了SQL Server 2008,并且不涉及编码。