如何在SQL Server存储过程中使用变量作为服务器名称

时间:2016-07-14 11:09:57

标签: sql sql-server stored-procedures

我有两台数据库服务器, server1 server2 ,这是我们遗留系统的差异化环境。我必须编写一个存储过程来获取与env。

之一进行通信的数据

我想要一种方法,以便我可以轻松切换env

像:

Declare @Server nvarchar(20)
set @Server="server1"

select * 
from @Server.global.dbo.tblaccount

2 个答案:

答案 0 :(得分:3)

参数不能用于标识符 - 列名,表名,模式名,服务器名,函数名等。

您可以使用动态SQL执行此操作:

declare @Server nvarchar(20);
declare @sql nvarchar(max);

set @Server = 'server1';

set @sql = 'select * from [Server].global.dbo.tblaccount';

set @sql = replace(@sql, '[Server]', @Server);

exec sp_executesql @sql;

答案 1 :(得分:0)

使用synonyms

create synonym mylocalschema.RemoteTable for server1.database.schema.table;

引用为:

select top 10 * from mylocalschema.RemoteTable;

取决于env,同义词将是对正确服务器的引用,而代码(sp,views,triggers,等等)对于两者都是相同的。

唯一重复的项目是创建同义词的脚本:一个用于server1,另一个用于server2(或者可能是使用动态sql构建的相同脚本...)。