在 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 时出错...如何保持日期不变?