2016-07-03 110 views
2

我正在创建一个以两个数据库作为输入的工具,比较表格并在表格中显示“仅数据差异”。是否有任何有效的解决方案/方法?

例如,
源数据库 - 的人,订单(两个表)
目标数据库 - 的人,订单(两个表)

现在,我的应用程序在源数据库与人在目标数据库进行比较的人并仅显示源人员中而不是目标人员中的记录。

这里是我的approach-

  1. 装载两个数据库分成两个数据集(源数据集, destinatioin数据集)。
  2. 将两个表格逐行比较。
  3. 如果发现发现的任何更改与源Person中不在目标Person中的行类似,则将这些行插入到目标Person中。

我的问题:有没有更好/有效的方法来实现这一目标?

迭代整个数据库是最不有效的解决方案。

+0

是否要将这2个输入数据库视为“主数据库”和“从数据库”(主服务器中的所有内容都必须位于从属系统中)? –

+0

否。应用程序还必须列出目标人员中并且不在源人员中的所有行。 – Moron117

+0

@Jossef Harush它比较两个表来源人和目标人。在左侧它将显示所有在源Person中而不在目标Person中的行(表示新行)。在右侧它显示了所有在目标Person中而不在源Person中的行(平均值,旧行)。 – Moron117

回答

1

通常最好将工作推入数据库。为每对表生成一个FULL OUTER JOIN查询以计算服务器上的差异。这将是到目前为止比传输所有数据到客户端更快。

特别是datatables等不是很有效。

一种不同的方法是请求行排序并在两个结果流上执行内存中的合并连接。你可以找到如何在网络上合并两个排序流的示例代码。

1

通常,您希望尽可能在数据库中执行尽可能多的处理。对于要读取表的全部内容的处理尤其如此。关系数据库是为这种类型的处理而设计的。

如果这两个数据库在同一台服务器上,那么你可能有这样的查询来获取在不在目的地源的个人记录:

select s.* 
from source..person 
except 
select d.* 
from destination..person; 

什么是这种方法的优势是什么?

  • SQL Server可以使用多线程运行查询。
  • SQL Server可以使用索引(尽管这可能不适用于此特定查询)。
  • SQL Server只返回应用程序所需的数据。

如果它们不在同一台服务器上,那么可以使用链接服务器连接服务器。 documentation是了解如何使用链接服务器的好地方。如果服务器使用不同的数据库,这甚至会起作用。

相关问题