【问题标题】:Where Clause And Select in Two Separate DBs on to separate serversWhere Clause And Select in two separate DBs on to separate servers
【发布时间】:2015-06-15 11:00:00
【问题描述】:

只是声明,目前无法使用链接服务器连接,因为我无权更改其中一台服务器上的任何内容。考虑到这一点,是否可以执行以下操作:

SELECT * FROM TableA
WHERE ID IN(SELECT ID FROM TableB)

表 B 在我的服务器上,表 A 在另一台服务器上。我正在考虑使用带有条件拆分的 OLE DB 源,其中

从表 A 中选择 *

将源于我无权更改的服务器上的其他数据库和

ID 在哪里(从表 B 中选择 ID)

以条件拆分的形式。我该如何处理?

【问题讨论】:

  • 你能用OPENROWSET吗?
  • 我不能不,我也不能改变它,因为我有访问限制。

标签: sql-server ssis sql-server-2008-r2


【解决方案1】:

您的问题并不完全清楚,但我认为您希望使用 SSIS 来提取 id 在另一个数据库的表中的数据。

为此,我将为每个项目添加一个源,然后按主键/外键对项目进行排序(您可以在源查询中执行此操作并设置“已排序”属性以更有效地执行此操作,但是这有点棘手)。然后您可以使用合并连接组件使用内部连接将两个表连接在一起,这样您就只能获得两个表中的 ID

编辑:

要调整它以获得最佳性能,请将您的键查找源更改为具有以下查询:

SELECT DISTINCT ID FROM TableB order by ID

在此源上设置“已排序”属性并删除后面的排序块。 (您也可以添加 order by 并从其他源中删除排序 - 仅当源已在 ID 上排序时才删除排序块)

归并排序要求双方在同一个键上排序。

【讨论】:

  • 我喜欢这个解决方案,因为它会起作用,我唯一的问题是它需要很长时间,因为其中一个源包含 9600 万条记录。应该有更有效的方法吗?
  • 查看编辑。你有什么样的性能要求?我有一些有 5000 万条记录的东西,它们在大约 40 分钟内运行,做类似的事情。最好的办法是在您自己的硬件上尝试一下,看看结果是否可以接受。
猜你喜欢
  • 2022-12-02
  • 2022-12-01
  • 2022-12-28
  • 1970-01-01
  • 2022-12-27
  • 2020-09-13
  • 2022-12-27
  • 2012-12-08
  • 1970-01-01
相关资源
最近更新 更多