在存储过程中更改数据库名称和跨数据库查询

问题描述:

我有许多版本相关的数据库。不同版本的实例可以并排运行,由其不同版本标识,即[NorhwindV1.1]和[NorhwindV1.2]可以与[SouthwindV1.1]和[SouthwindV1.2]一起位于同一台服务器上。在存储过程中更改数据库名称和跨数据库查询

有一些存储过程可以进行跨数据库查询,即存在于NorthwindV1.1上,也存在于SouthwindV1.1中的查询表中。通过更改版本号来管理数据库名称更改的最佳方法是什么,以便存储过程查询正确版本的数据库?

谢谢,MagicAndi。

假设数据库之间的查询表是可控的,你可以创建这些表的同义词,并在过程中使用同义词的数量。那么您只需要更改同义词即可在不同版本之间进行切换。

http://msdn.microsoft.com/en-us/library/ms177544.aspx

+0

乔被接受为答案。 – MagicAndi 2010-05-26 15:22:29

我只知道两种方式,而且这两种方法都有点吸引人。首先是使用动态SQL,如:

declare @db varchar(512) 
set @db = 'NorthwindV1.1' 

declare @sql varchar(max) 
set @sql = 'select * from ' + @db + '.dbo.YourTable' 
exec (@sql) 

第二个是安装多个实例,如果SQL Server在一台机器上。像localhost\v1.0localhost\v1.1等等。然后,您可以创建你喜欢查询链接服务器:

select * from linkedserver.northwind.dbo.YourTable 

现在你可以改变linkedserver在localhost\v1.0localhost\v1.1一个存储过程将遵循指向。

我会看这个问题,看看是否更好的建议弹出:)

+0

感谢Andomar,我没有考虑安装SQL Server的多个实例。 +1。 – MagicAndi 2010-05-26 12:07:57

您可以创建所需的其他表的每个数据库中的观点。存储的proc会引用视图,视图会指向“正确”的数据库。

甚至可能创建一个简单的TSQL存储过程,以在需要切换到新数据库时生成视图。