2015-02-05 55 views
1

我有两个Sql Server 2008 R2数据库,名为MyDbOneMyDbTwoSQL Server - 使用传统支持重命名和合并数据库

我想将它们(所有表和程序)合并到一个名为MyDb的新数据库中。

假设它们之间没有表和过程名称的冲突。

问题是:有很多代码和过程使用数据库名称执行查询,包括在其中一个数据库参考表中声明的过程。有喜欢的查询:

select * from MyDbOne..SomeTable; 
select * from MyDbTwo..AnotherTable; 

的表SomeTableAnotherTable然后将在MyDb数据库中。但我需要支持使用名称MyDbOneMyDbTwo来查询它们。如果我要运行上述查询,我​​希望它们有效地相同:

select * from MyDb..SomeTable; 
select * from MyDb..AnotherTable; 

有没有办法做到这一点?也许在新的数据库上创建某种全局别名,解析MyDbOneMyDbTwoMyDb?这将是完美的,但我不知道该怎么做。

非常感谢你!

回答

0

我不认为有这个问题的解决方案。如果我是你,我会保留现有的MyDbOneMyDbTwo数据库并创建一个全新的,通过视图引用这两个表。基本上,您将创建一个位于这些现有数据库之上的Data Warehouse。这个设置的好处是,你不必重写任何遗留的代码,这是很大的。

0

有没有简单的方法。您必须手动更新所有这些参考。您可以使用this answer中的以下查询之一在SQL Server中搜索包含这些数据库名称的所有对象;

SELECT ROUTINE_NAME, ROUTINE_DEFINITION 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%Foo%' 
AND ROUTINE_TYPE='PROCEDURE' 

SELECT OBJECT_NAME(id) 
FROM SYSCOMMENTS 
WHERE [text] LIKE '%Foo%' 
AND OBJECTPROPERTY(id, 'IsProcedure') = 1 
GROUP BY OBJECT_NAME(id) 

SELECT OBJECT_NAME(object_id) 
FROM sys.sql_modules 
WHERE OBJECTPROPERTY(object_id, 'IsProcedure') = 1 
AND definition LIKE '%Foo%'