按服务器名称动态访问服务器

时间:2015-03-18 12:34:21

标签: sql-server-2008

在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

我的问题是,是否有任何其他方式来访问请求服务器。我想用更动态的内容替换ifcase s。例如,是否可以使用服务器名称变量来动态访问特定服务器。类似于以下(模拟)查询的东西:

declare myServer <server type> = Get_Server(@serverName)
-- the query
additionalData = select field1 from [myServer].[MyDataBase].[dbo].[MyTable]

1 个答案:

答案 0 :(得分:0)

我喜欢这种方法

SELECT
    SERVERPROPERTY('MachineName') AS [ServerName], 
    SERVERPROPERTY('ServerName') AS [ServerInstanceName], 
    SERVERPROPERTY('InstanceName') AS [Instance], 
    SERVERPROPERTY('Edition') AS [Edition],
    SERVERPROPERTY('ProductVersion') AS [ProductVersion], 
    Left(@@Version, Charindex('-', @@version) - 2) As VersionName

Link

我们使用的另一种方法是

创建一个名为 database_yourprojectname

的数据库

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

的新数据库

其中包含以下字段:

Servername,username(encrypted),password(encrypted),active

然后你可以将一个页面设置为插入/更新/删除当前使用的数据库 或者您可以向其添加静态数据..因此,您可以使用当前处于活动状态的数据库。

或使用简单的:

SELECT @@SERVERNAME

已经是stated here