在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
我的问题是,是否有任何其他方式来访问请求服务器。我想用更动态的内容替换if
和case
s。例如,是否可以使用服务器名称变量来动态访问特定服务器。类似于以下(模拟)查询的东西:
declare myServer <server type> = Get_Server(@serverName)
-- the query
additionalData = select field1 from [myServer].[MyDataBase].[dbo].[MyTable]
答案 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
创建一个名为 database_yourprojectname
的数据库因此,对于解释,我使用的数据库名称为 northwind 之后,您可以创建一个名为 northwind_db
的新数据库其中包含以下字段:
Servername,username(encrypted),password(encrypted),active
然后你可以将一个页面设置为插入/更新/删除当前使用的数据库 或者您可以向其添加静态数据..因此,您可以使用当前处于活动状态的数据库。
SELECT @@SERVERNAME
已经是stated here