在远程服务器中运行 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 查询的主要内容,如果未能解决你的问题,请参考以下文章

查询分析器远程连接:sql server 不存在或拒绝访问

sql_server 新建远程查询

sql 如何在不设置链接服务器的情况下查询远程Microsoft SQL Server

远程 SQL Server 连接问题

sql server 使用链接服务器远程查询(转)

如何使用远程桌面连接到 SQL Server