Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在存储过程中更改数据库名称和跨数据库查询_Sql_Sql Server_Sql Server 2005_Stored Procedures - Fatal编程技术网

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

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。我只知道两种方法,而且都有点差劲。

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

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


谢谢你,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.