可以创建连接到多个服务器的SQL Server存储过程吗?

时间:2018-04-25 19:43:16

标签: sql sql-server

我的问题与能够创建连接到多个服务器的存储过程的能力有关。如果有人不熟悉它,那么SQL中的一个:CONNECT语法将切换运行查询的位置。例如:

:CONNECT SERVERNAME

SELECT *
FROM Table

GO

这将运行存储表的查询,而不是使用链接服务器(这会导致严重的性能问题)。有谁知道创建在服务器之间切换的存储过程是否可能(以及如何实现它)?在尝试实现它时,我不断收到各种错误消息。这是一个例子:

:CONNECT SERVERNAME

SELECT *
FROM Table

GO

:CONNECT SERVERNAME2

SELECT *
FROM Table

GO

这将连接到同一查询中的两个不同服务器。

由于

更新 - 4.26.2018

所有

我们几乎认为OPENQUERY是我们最好的解决方案,至少对于存储过程而言。不幸的是,我们受到语法的限制,但性能比使用链接服务器(这是我们目前正在使用的)更好。我感谢每个人都说过话;您的意见非常宝贵。如果您想添加任何其他内容,请随时这样做。

由于

1 个答案:

答案 0 :(得分:1)

在4部分命名约定中使用链接服务器将起作用。它在性能方面会变得很难看,所以要小心。如果您确实使用了链接服务器,我建议不要将多个服务器放在同一个SQL语句中(包括您正在使用的本地服务器)。它不是非常有效。它基本上将查询分解为本地和远程查询,然后擦除数据,并在完成之前将其组合在本地。我已经看到用户使用多个服务器执行查询,并在此过程中删除可靠的服务器。

另一种选择是OPENQUERY()方法。这仍然使用链接服务器,但会将查询发送到其他服务器,以处理整个事情并返回数据。这通常比以前更快,更有效。

SELECT
     opn.Id,
     opn.ColumnName,
     opn.AnotherColumnName
FROM OPENQUERY([LinkedServerName],
     'SELECT
          tbl.Id,
          tbl.ColumnName,
          tbl.AnotherColumnName
     FROM DB.Schema.Object AS tbl
     WHERE tbl.ColumnName = ''SomeValue'''
) AS opn

此链接提供了一些更好的信息:Click Here

SSIS是你最好的选择。它在使用来自多个服务器的数据时速度很快,很好,并且不太难学(无论如何都是基础)。

所以,我列出的一些选项......

  1. SSIS - 最佳选择
  2. OPENQUERY() - 更好的选择
  3. 已关联的服务器 - "我猜它可行"选项