0

我有 914 个存储过程,需要在两个数据库之间进行洗牌。

Server1 上的 62 个存储过程不在 Server2 上,而 Server2 上的 790 个存储过程不在 Server1 上。

我确切地知道缺少哪些存储过程,因为我运行了这个查询来找到它们:

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 上的“每个”存储过程,只需要迁移那些丢失的存储过程。

4

1 回答 1

0

您应该能够在 SQL Server 2008 附带的 Visual Studio IDE 中创建 SQL Server 数据库项目

创建项目和连接后,您可以进行数据库比较。

比较完成后,它将向您显示数据库中的差异,并且默认情况下已经预先设置执行以将缺少的内容从一个复制到另一个,如果有您不想要的东西,并且您实际上可以使用您希望复制并执行到 T 的复选框进行选择。只需确保告诉比较选项您只关心对象,而不是登录名以及 SQL Server 附带的其他零碎。

这就是我在你的情况下会做的。尽管使用 T-SQL 也不是不可能的。我只回答这个问题是因为此选项和 ​​Visual Studio IDE 确实随 SQL Server 2008 的安装一起提供,并且不涉及编码。

于 2013-11-13T21:45:13.703 回答