减少往返次数

时间:2013-09-03 16:32:57

标签: c# sql-server-2008

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

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

我的第一个查询是

Select changelist from database1;

这为我提供了更改列表清单。

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

触发查询
foreach change in changelist
select * from database2 where changelist= change;

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

3 个答案:

答案 0 :(得分:1)

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

SELECT * FROM ChangeList, [Database2].[dbo].[Change]

答案 1 :(得分:1)

如果要使用该另一个表中相当大比例的项目,并且您有足够的资源(即内存),则可以选择从第二个源下载整个更改列表表然后在C#程序中从那里开始工作。如果需要所有/大部分数据,这根本不浪费。如果您只需要一小部分数据,但这仍然有效,那么它可能是最简单的选择,因此无论如何都值得做。

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

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

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

答案 2 :(得分: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;