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

时间:2010-05-26 11:24:01

标签: sql sql-server sql-server-2005 stored-procedures

我有许多版本相关的相关数据库。不同版本的实例可以并排运行,由它们的不同版本标识,即[NorhwindV1.1]和[NorhwindV1.2]可以与[SouthwindV1.1]和[SouthwindV1.2]一起位于同一服务器上。

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

谢谢,MagicAndi。

3 个答案:

答案 0 :(得分:5)

假设在数据库之间查询的表的数量是可管理的,您可以为这些表创建同义词并在过程中使用同义词。然后,您只需更改同义词即可在不同版本之间切换。

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

答案 1 :(得分:2)

我只知道两种方式,两种方式都很糟糕。第一种是使用动态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

现在,您可以将链接服务器更改为指向localhost\v1.0localhost\v1.1之一,然后存储过程将会跟进。

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

答案 2 :(得分:1)

您可以在每个数据库中为所需的其他表创建视图。存储过程将引用视图,视图将指向“正确”的数据库。

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