如何针对不同的数据库系统执行SQL查询?

时间:2014-07-21 03:36:10

标签: sql sql-server database oracle

我有一个关于如何针对不同数据库系统执行数据库查询的问题?

例如,我有一个以下SQL查询字符串:

SELECT A.F1, A.F2, B.F3, B.F4 
FROM TableA A, TableB B 
WHERE A.ID=B.ID AND B.ID=xyz

有什么解决方案可以在以下情况下执行上述查询:

  • TableA来自Oracle数据库,TableB也来自另一个实例的Oracle数据库
  • TableA来自SQL Server数据库,TableB来自Oracle数据库
  • TableA来自Oracle数据库,TableB来自SQL Server数据库
  • TableA来自SQL Server数据库,TableB也来自另一个SQL Server实例的SQL Server数据库

我知道对于情况#1,我可以使用ORACLE DATABASE LINK功能(也可能是#3)。但是,是否有任何可以解决上述所有情况的通用解决方案?例如,可能还有另一种情况,我想从MySQL和SQL Server数据库连接两个表。

对于我正在使用C#/ .NET的编码,欢迎任何建议,包括加入代码中的数据。

谢谢!

1 个答案:

答案 0 :(得分:0)

这称为联合查询

您可以使用SQL Server联合功能(链接服务器)并在SQL Server中运行查询。您可以使用Oracles联合能力(Oracle异构服务)并在Oracle中运行查询。

无论哪种方式,您都需要选择数据库服务器,使该服务器知道其他(外部)数据库,然后在服务器上执行查询。

请记住,您不能期望从中获得良好的性能,因为在大多数情况下,执行服务器在本地加载所有源记录并在本地加入。

否则,您需要在应用中编写自己的“联合”功能。这是非常重要的,即数据类型与供应商之间不完全匹配,因此您需要构建一些智能。此外,如果您要加入特别大的表,您最好确保您的算法已经优化,或者您将运行我们的内存。此外,现有产品(SQL,Oracle,Cognos等)的联合查询能力是非常大的公司进行大量开发的结果。

您能告诉我们您希望加入多少条记录,并且各种源数据库服务器大多是固定的,还是针对即席查询工具?