[英]Changing Database Names and Cross Database Queries In Stored Procedures
我有许多版本相关的相关数据库。 不同版本的实例可以并排运行,由不同版本标识,即[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存储过程来在需要切换到新数据库时生成视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.