在 SQL Server CE 中解析查询时出错

Posted

技术标签:

【中文标题】在 SQL Server CE 中解析查询时出错【英文标题】:Error parsing query in SQL Server CE 【发布时间】:2013-07-02 12:32:45 【问题描述】:

我有一个在运行 SQL Server CE 的 Windows Mobile 上运行的现有应用程序,并且正在使用 C# 语言的内联查询。这是我在 Management Studio 中正常工作的查询:

command = @"SELECT  
                P_InspectionStep.InspectionStepID,
                P_InspectionStep.Sequence AS Sequence,
                P_InspectionStep.Title AS Title,
                P_InspectionStep.Body AS Body,
                P_InspectionStep.Photo AS Photo,
                P_Inspection.RevisionID
            FROM
                P_InspectionStep
            LEFT JOIN 
                P_Inspection ON P_Inspection.InspectionID = P_InspectionStep.InspectionID
            WHERE 
                P_Inspection.InspectionID = '" + mInspectionID + "'" +
                @"AND P_Inspection.CreateDate = (SELECT MAX(P_Inspection.CreateDate) FROM P_Inspection)

            UNION ALL

            SELECT
                C_InspectionStep.InspectionStepID,
                C_InspectionStep.Sequence AS Sequence,
                C_InspectionStep.Title AS Title,
                C_InspectionStep.Body AS Body,
                C_InspectionStep.Photo AS Photo,
                C_Inspection.RevisionID
            FROM 
                C_InspectionStep
            LEFT JOIN 
                C_Inspection ON C_Inspection.RevisionID = C_InspectionStep.RevisionID
            WHERE 
                C_Inspection.InspectionID = '" + mInspectionID + "'" +
                @"AND C_Inspection.CreateDate = (SELECT MAX(C_Inspection.CreateDate) FROM C_Inspection)
            ORDER BY 2;";

但是在应用程序中运行它会返回这个SqlCeException

解析查询时出错。 [令牌行号=10,令牌行偏移量=132,错误令牌=SELECT]

我已经进行了很多搜索,但无法找到解决此问题的方法。

【问题讨论】:

【参考方案1】:

提供值

(SELECT MAX(P_Inspection.CreateDate) FROM P_Inspection)

来自另一个预先运行的查询。

【讨论】:

此解决方案还会导致我在@Alex K. 解决方案中描述的本机异常。【参考方案2】:

您不能有一个返回标量值的子查询,但您可以返回一个集合,因此请使用 IN 而不是相等测试:

... C_Inspection.CreateDate IN (SELECT MAX(C_Inspection.CreateDate) FROM C_Inspection)

【讨论】:

我试过这个,我在应用程序 exe 中得到一个本机异常,我无法用调试器捕获。看起来像阅读器移动方向的东西。我将命令值复制到 sql 查询窗口中,它返回数据正常。

以上是关于在 SQL Server CE 中解析查询时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 WP7.1 SQL Server CE 数据库上执行 SQL 查询

转换 SQL Server DATETIME 时出错...如何保持日期不变?

SQL Server CE:如果存在更新,否则插入

SQL 查询在 SQL Server CE 中很慢,但在 SQL Server 中很快

如何解释此 SQL Server CE 行为 - 不更新

C#/ASP.NET 网站使用 SQL Server CE 数据库慢查询