【问题标题】:Compare the data in two tables, one is Oracle, the other is SQL Server比较两张表中的数据,一张是Oracle,一张是SQL Server
【发布时间】:2017-04-26 20:23:18
【问题描述】:

我有两个数据库,一个是Oracle 11g,另一个是Sql Server 2012。Oracle 数据库中有一个表,其中包含一个名为BASE_ID 的列。这由工作订单号组成。

在 Sql Server 数据库中,还有一个表,其中包含一个名为 WorkOrders 的列。这也包含工作订单号。我需要做的是将 Oracle 列中的内容与 SQL Server 列中的内容进行比较,并显示 Oracle 中的内容而不是 Sql Server 中的内容。我在这里有点难过,即使是一个起点。我有点只是在拍罐子。这个烂摊子是我目前所拥有的:

   private void compare()
    {
        try
        {
            if (con.State != ConnectionState.Open)
                con.Open();
            DataTable t = new DataTable();
            OracleCommand oraCmd = new OracleCommand("SELECT BASE_ID FROM WORK_ORDER x WHERE NOT EXISTS(SELECT NULL FROM [SQLServer].[BACRTest].[WorkOrders] y WHERE y.WorkOrder = x.BASE_ID)", oraconn);
            OracleDataAdapter dt = new OracleDataAdapter(oraCmd);
            dt.Fill(t);
            dataGridView3.DataSource = t;
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }

    }

这只是给我一个 ORA-00903: invalid table name 错误,这很公平,因为我并没有真正期望它会起作用。

非常感谢任何建议。

【问题讨论】:

  • 为什么不分别从两个数据库中获取日期,然后在内存中进行比较?
  • 我想到了这样的事情。将数据提取到变量中并进行比较。我只是不太确定该怎么做。
  • Oracle 和 SQL Server 数据库之间是否存在允许 Oracle 查询 SQL Server 表或反之亦然的连接?您可能需要与您的 DBA 讨论此问题。

标签: c# sql-server database oracle oracle11g


【解决方案1】:

如上所述,如果您安装了正确的产品(例如 Oracle 的 SQL Server 数据库网关或 ODBC 数据库网关),您可以在 Oracle 和 SQL Server 之间建立直接连接。如果您没有此类产品,可以尝试将 SQL Server 表导出到逗号分隔值 (.csv) 文件,然后在 Oracle 中设置外部表以读取 .csv。也许不是世界上最无缝的方法,但它确实代表了一种处理方法。

祝你好运。

【讨论】:

  • 我同意 Bob 的建议 - 将其中一个表导入另一个数据库并比较那里的两个表。通过从两者中提取数据并在 C#、Java 或 bash(或 Excel 等)中进行比较来比较它们会比较麻烦,尤其是在您有大量数据的情况下。
【解决方案2】:

由于条目位于不同的 DBMS 上,您无法直接对此进行查询,因此您很可能需要将条目存储在内存中并一一进行比较。也许您可以将表分成小组并进行比较

【讨论】:

  • 如果您有正确的产品(例如,Oracle 的 SQL Server 数据库网关,或者如果 Oracle 实例在支持 ODBC 的平台上运行,则为 ODBC 数据库网关),您当然可以这样做;但是,它确实需要一些工作来设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多