在远程服务器中运行 SQL Server 查询
Posted
技术标签:
【中文标题】在远程服务器中运行 SQL Server 查询【英文标题】:Running SQL Server query in Remote Server 【发布时间】:2021-07-16 03:00:51 【问题描述】:我有三个 SQL Server A、B 和 C。我正在尝试从 A 服务器运行类似 select @@servername
的相同查询,并从服务器 A 在 B 和 C 中运行相同的查询。我正在将结果加载到服务器中一张桌子。请告诉我如何完成这个。
【问题讨论】:
根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。 请展示您尝试的方法并解释它是如何不起作用的(在问题中不是 cmets)。 您的 3 个实例真的 2008、2008R2 和2012 吗?因此,其中 2 个完全不受支持,最后一个支持仅剩一年多。是时候整理一下升级路径了。 【参考方案1】:您可以使用链接服务器。
1- 在一个实例中
INSERT INTO [DatabaseName].[SchemaName].[TableName] (...) SELECT ... FROM [B].[DatabaseName].[SchemaName].[TableName];
INSERT INTO [DatabaseName].[SchemaName].[TableName] (...) SELECT ... FROM [C].[DatabaseName].[SchemaName].[TableName];
2- 在一个实例内(动态 SQL)
EXEC ('INSERT INTO [A].[DatabaseName].[SchemaName].[TableName] (...) SELECT ... FROM [DatabaseName].[SchemaName].[TableName]') AT [B];
EXEC ('INSERT INTO [A].[DatabaseName].[SchemaName].[TableName] (...) SELECT ... FROM [DatabaseName].[SchemaName].[TableName]') AT [C];
3- 在其他实例中
INSERT INTO [A].[DatabaseName].[SchemaName].[TableName] (...) SELECT ... FROM [DatabaseName].[SchemaName].[TableName];
【讨论】:
【参考方案2】:您可以使用 OPENQUERY
从两个远程服务器运行插入,这实际上是在远程服务器上本地运行 select 以便能够使用正确的本地索引等。
insert into localTableOnA (col1,col2,...)
select col1,col2,... from [dbname].dbo.[tablename] --on ServerA
insert into localTableOnA (col1,col2,...)
select col1,col2,... from openquery([ServerB],'select col1,col2,... from [dbname].dbo.[tablename]')
insert into localTableOnA (col1,col2,...)
select col1,col2,... from openquery([ServerC],'select col1,col2,... from [dbname].dbo.[tablename]')
【讨论】:
感谢您的回复。我在服务器 A 中有一个程序,我也必须在 B 和 C 中运行该程序。我在 B 和 C 中没有那个过程。我必须运行服务器 A 过程才能得到 B 和 C 的结果。需要做些什么来解决这个问题。 @Test 如果存储过程只存在于服务器A,那么它只能在那里运行。在该 SP 中,您可以如上所述查询服务器 B 或 C 上的表。以上是关于在远程服务器中运行 SQL Server 查询的主要内容,如果未能解决你的问题,请参考以下文章