2016-06-07 77 views
0

我有两个分离的环境(测试和生产)。每个环境都有两台服务器(istN和istG)。T-SQL动态链接服务器

而他们的链接服务器:

  • 测试(链接的服务器从ISTG到ISTN):TEST01 \ ISTN。 如果在查询中使用的是:

    SELECT * FROM [test01\istn].MyDatabase.dbo.Table01

  • 生产(从ISTG链接服务器以ISTN)production01 \ ISTN 如果在查询中使用的是:

    SELECT * FROM [production01\istn].MyDatabase.dbo.table01

我们使用的版本系统在每个环境(测试和生产)中部署相同的SQL脚本,无论环境如何:

那么如何才能编写一个可以在环境中使用的脚本? 有没有一种获得动态链接服务器的方法? 这样的:

SELECT * FROM [@variable].MyDatabase.dbo.table01

感谢。

+0

你能说出environment_的链接服务器_regardless。 –

+0

不能这样做。我不是整个基础设施的所有者(这是一家银行)。所以我必须遵守他们的规则。 – Beld86

+0

那么你的方式是一个动态的SQL或有限的'视图'的方法与联合和服务器名为列 –

回答

0

你可以尝试这样的,

DECLARE @linkedServer VARCHAR(50) = '' 

EXEC ('select * from openquery(' + @linkedServer + ', ''SELECT * FROM MyDatabase.dbo.Table01''') 
0

请使用以下查询。在SQL Server的工作的罚款2012

DECLARE @LinkedServer VARCHAR(100) 
SET @LinkedServer ='production01\istn' 
EXEC('SELECT * FROM ['[email protected]+'].MyDatabase.dbo.table01') 

请使用以下是你需要在执行过程中获取服务器名称:

DECLARE @LinkedServer VARCHAR(100) 
SET @LinkedServer =(SELECT @@SERVERNAME) 
EXEC('SELECT * FROM ['[email protected]+'].MyDatabase.dbo.table01') 
+0

好吧,现在它可以工作。但是还有一个问题:如果我需要用更新语句构建存储过程?我更新了另一台服务器上的表格。 – Beld86

+0

对不起,我不明白你的要求。你可以解释吗? –

+0

我需要构建一个存储过程(将在相同的自动发布结构中发布)。在SP中,我需要编写更新声明。是否可以使用您提供的相同说明?在另一台服务器上找到要更新的表格(“已连接”的表格) – Beld86