Sql server 2008 按服务器名称动态访问服务器

Sql server 2008 按服务器名称动态访问服务器,sql-server-2008,Sql Server 2008,在我使用的SQL Server 2008中,是否可以按服务器名称动态访问服务器 我的场景:我有一个生产服务器、一个开发服务器和一个测试服务器。它们的结构是相同的。第四个服务器有一些额外的数据-让我们称之为数据服务器 在数据服务器上有一个过程。其中一个参数是请求服务器的名称: proc sp_myProcedure(@myId int, @serverName nvarchar(100)) 该过程从数据服务器和请求服务器访问表。目前,要查询请求服务器,我使用的是case表达式: -- code

在我使用的SQL Server 2008中,是否可以按服务器名称动态访问服务器

我的场景:我有一个生产服务器、一个开发服务器和一个测试服务器。它们的结构是相同的。第四个服务器有一些额外的数据-让我们称之为数据服务器

在数据服务器上有一个过程。其中一个参数是请求服务器的名称:

proc sp_myProcedure(@myId int, @serverName nvarchar(100))
该过程从数据服务器和请求服务器访问表。目前,要查询请求服务器,我使用的是case表达式:

-- code on the data server
select additionalData = case @serverName
    -- if the requesting server is production - query production
    when 'ProdServer' then (select field1 from [ProdServer].[MyDataBase].[dbo].[MyTable] ...
    -- if the requesting server is test - query test
    when 'TestServer' then (select field1 from [TestServer].[MyDataBase].[dbo].[MyTable] ...
    -- if the requesting server is development - query development
    when 'DevServer' then (select field1 from [DevServer].[MyDataBase].[dbo].[MyTable] ...
end
我的问题是,是否有其他方法可以访问请求服务器。我想用更具活力的东西来取代ifs和案例。例如,是否可以使用server name变量动态访问特定服务器。类似于以下模拟查询的内容:

declare myServer <server type> = Get_Server(@serverName)
-- the query
additionalData = select field1 from [myServer].[MyDataBase].[dbo].[MyTable]
我喜欢这种方法

我们正在使用的另一种方法是 创建一个名为database_yourprojectname的数据库

因此,我使用数据库名northwind作为解释 之后,您可以创建一个名为northwind_db的新数据库

其中包含以下字段:

Servername,username(encrypted),password(encrypted),active
然后,您可以创建一个页面来插入/更新/删除当前使用的数据库 或者您可以向其中添加静态数据。因此,您可以使用当前处于活动状态的数据库

或者使用简单的一个:
已经是

我已经有了一个服务器名。我想要实现的是以某种方式通过服务器名称访问服务器实例。所以我有服务器A、B、C,从服务器D我想访问服务器A,如果请求的服务器名是A,如果请求的服务器名是B,等等,那么你的方法对我来说是可行的。现在找不到其他的了,我只是希望有一种方法可以摆脱所有这些干扰我代码的if/case语句。我当前方法的另一个问题是,如果我从另一台服务器开始查询该过程,我将不得不使用附加条件手动更新该过程,以包括新的服务器名称。我想说的另一种方法是,但不确定它是否适用于您的情况。只需再添加一个数据库,所有服务器都将访问该数据库然后,服务器只需根据需要重定向即可。因此,对于该实例,如果您需要更改或希望更改服务器重定向,则只需更改一个数据库。但是,您必须按照查询中的说明指定方向。不确定这是否容易。
Servername,username(encrypted),password(encrypted),active
SELECT @@SERVERNAME