我的问题与能够创建连接到多个服务器的存储过程的能力有关。如果有人不熟悉它,那么SQL中的一个:CONNECT语法将切换运行查询的位置。例如:
:CONNECT SERVERNAME
SELECT *
FROM Table
GO
这将运行存储表的查询,而不是使用链接服务器(这会导致严重的性能问题)。有谁知道创建在服务器之间切换的存储过程是否可能(以及如何实现它)?在尝试实现它时,我不断收到各种错误消息。这是一个例子:
:CONNECT SERVERNAME
SELECT *
FROM Table
GO
:CONNECT SERVERNAME2
SELECT *
FROM Table
GO
这将连接到同一查询中的两个不同服务器。
由于
更新 - 4.26.2018
所有
我们几乎认为OPENQUERY是我们最好的解决方案,至少对于存储过程而言。不幸的是,我们受到语法的限制,但性能比使用链接服务器(这是我们目前正在使用的)更好。我感谢每个人都说过话;您的意见非常宝贵。如果您想添加任何其他内容,请随时这样做。
由于
答案 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是你最好的选择。它在使用来自多个服务器的数据时速度很快,很好,并且不太难学(无论如何都是基础)。
所以,我列出的一些选项......