Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQLServer存储过程中使用变量作为服务器名称_Sql_Sql Server_Stored Procedures - Fatal编程技术网

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

如何在SQLServer存储过程中使用变量作为服务器名称,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有两个数据库服务器,server1和server2,它们是我们遗留系统的差异环境。我必须编写一个存储过程来获取与其中一个env通信的数据 我想要一种可以轻松切换环境的方法 比如: 参数不能用于标识符——列名、表名、架构名、服务器名、函数名等等 您可以使用动态SQL执行此操作: declare @Server nvarchar(20); declare @sql nvarchar(max); set @Server = 'server1'; set @sql = 'select * from

我有两个数据库服务器,server1server2,它们是我们遗留系统的差异环境。我必须编写一个存储过程来获取与其中一个env通信的数据

我想要一种可以轻松切换环境的方法

比如:


参数不能用于标识符——列名、表名、架构名、服务器名、函数名等等

您可以使用动态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;
使用:

为server1.database.schema.table创建同义词mylocalschema.RemoteTable

引用为:

从mylocalschema.RemoteTable中选择前10个*

根据env的不同,同义词将是对正确服务器的引用,而代码(sp、视图、触发器等)对这两个服务器都是相同的

唯一重复的项目是创建同义词的脚本:一个用于server1,另一个用于server2(或者可能是使用动态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;