2

我在不同的服务器中有 2 个数据库:服务器 1具有所有更改列表的列表,服务器 2具有更改列表中所有已修改文件的列表。

我需要合并两个表中的数据。

我的第一个查询是

Select changelist from database1;

这给了我更改列表的列表。

现在,对于每个更改列表,我需要使用

foreach change in changelist
select * from database2 where changelist= change;

有没有办法一次将所有更改列表发送到数据库并在一次往返中获取数据?

4

3 回答 3

1

您可以执行JOIN语句并添加Linked Server,在将其中一个服务器添加为链接服务器后,您可以执行以下操作:

SELECT * FROM ChangeList, [Database2].[dbo].[Change]
于 2013-09-03T16:41:05.573 回答
1

如果将要使用该其他表中的很大一部分项目,并且您有足够的资源(即内存)能够使用,则一种选择是从您的第二个来源中拉下整个更改列表表,然后执行在你的 C# 程序中的工作。如果需要所有/大部分数据,这根本不是浪费。如果您只需要一小部分数据,但这仍然有效,它可能是最简单的选择,因此无论如何都值得这样做。

另一种选择是尝试构建如下查询:

select * from database2 where changelist in (change1, change2, change3, ...);

只要更改的数量足够小,这是一个选项。根据您的数据库,您通常会有一个硬性限制,一千或两个,尽管在您达到这一点之前,这个选项可能会有点混乱。

于 2013-09-03T16:43:44.187 回答
0

这些中的任何一个都应该满足您的需求,但我不是游标的忠实粉丝。

选择

SELECT *
FROM database2
WHERE changelist IN (Select Changelist from database1)

光标

DECLARE Change CURSOR FOR
SELECT Changelist from Database1

OPEN Change;
FETCH NEXT FROM Change;
WHILE @@FETCH_STATUS = 0
   BEGIN
      select * from database2 where changelist= Change;
   END;
于 2013-09-03T19:28:58.207 回答