Sql 在存储过程中更改数据库名称和跨数据库查询
我有许多相关的数据库都是版本化的。不同版本的实例可以并排运行,由它们的不同版本标识,即[NorhwindV1.1]和[NorhwindV1.2]可能与[SouthwindV1.1]和[SouthwindV1.2]位于同一台服务器上 有许多存储过程可以进行跨数据库查询,即存在于NorthwindV1.1中,也存在于SouthwindV1.1中的查询表中。通过更改版本号管理数据库名称更改的最佳方法是什么,以便存储过程查询数据库的正确版本Sql 在存储过程中更改数据库名称和跨数据库查询,sql,sql-server,sql-server-2005,stored-procedures,Sql,Sql Server,Sql Server 2005,Stored Procedures,我有许多相关的数据库都是版本化的。不同版本的实例可以并排运行,由它们的不同版本标识,即[NorhwindV1.1]和[NorhwindV1.2]可能与[SouthwindV1.1]和[SouthwindV1.2]位于同一台服务器上 有许多存储过程可以进行跨数据库查询,即存在于NorthwindV1.1中,也存在于SouthwindV1.1中的查询表中。通过更改版本号管理数据库名称更改的最佳方法是什么,以便存储过程查询数据库的正确版本 谢谢你,MagicAndi。我只知道两种方法,而且都有点差劲。
谢谢你,MagicAndi。我只知道两种方法,而且都有点差劲。第一种是使用动态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.0
,localhost\v1.1
,等等。然后,您可以创建一个链接的服务器,查询方式如下:
select * from linkedserver.northwind.dbo.YourTable
现在,您可以将linkedserver更改为指向localhost\v1.0
,localhost\v1.1
中的一个,存储过程如下所示
我将关注这个问题,看看是否会弹出更好的建议:)假设数据库之间查询的表的数量是可管理的,您可以为这些表创建同义词,并在过程中使用同义词。然后,您只需更改同义词即可在版本之间切换
您可以在每个数据库中为所需的其他表创建视图。存储的进程将引用视图,视图将指向“正确”的数据库
您甚至可以创建一个简单的TSQL存储过程,以便在视图需要切换到新数据库时生成视图。感谢Andomar,我没有考虑安装多个SQL server实例+1.