子查询不使用Access链接表

时间:2014-02-12 23:21:50

标签: c# sql ms-access odbc sage-line-50

我正在尝试构建一个从包含财务信息的数据库中提取信息的工具,但是我遇到了这个问题。以下查询将为我提供一些我需要的数据,但是只要我在子查询中添加,就会收到错误消息

  

“ODBC - 调用失败”。

如果我用静态"WHERE TRAN_NUMBER IN (0,1,2,3..)"替换子查询,则返回预期值。子查询在自行运行时返回预期值。

我正在使用MS Access和C#以及OleDB库来执行此操作

任何想法我做错了什么?

SELECT NOMINAL_CODE, DETAILS, AMOUNT, TYPE
FROM AUDIT_JOURNAL
WHERE TRAN_NUMBER IN
   (SELECT AUDIT_TRAIL_ID
    FROM PROJECT_TRAN 
    WHERE AUDIT_TRAIL_ID > 0);
  

类型'System.Data.OleDb.OleDbException'的第一次机会异常   发生在System.Data.dll

中      

其他信息:ODBC - 调用失败

编辑:当通过ODBC链接到另一个数据库时,子查询看起来不起作用(原始数据库是SageLine50数据库)。我已静态导入表格,似乎有效。有没有人知道如何在不静态导入表格的情况下完成这项工作?

1 个答案:

答案 0 :(得分:1)

您可以尝试JOIN

,而不是使用IN子句和子查询
SELECT 
    aj.NOMINAL_CODE, 
    aj.DETAILS, 
    aj.AMOUNT, 
    aj.TYPE
FROM 
    AUDIT_JOURNAL AS aj
    INNER JOIN
    PROJECT_TRAN AS pt
        ON aj.TRAN_NUMBER = pt.AUDIT_TRAIL_ID
WHERE pt.AUDIT_TRAIL_ID > 0

re:您在编辑问题时的评论

  

当通过ODBC链接到另一个数据库时,子查询看起来不起作用(原始数据库是SageLine50数据库)。

所有 ODBC链接表肯定不是这样。我在SQL Server 2008 R2中创建了表[AUDIT_JOURNAL]和[PROJECT_TRAN],在Access 2010中创建了链接表,并且您的原始查询在Access中正常工作。 (我的确如此。)您的问题几乎肯定是由SageLine50 ODBC驱动程序的缺陷引起的。