【发布时间】:2012-03-11 15:48:14
【问题描述】:
我正在使用 WebMatrix 运行我的查询,我认为它是正确的,但是我遇到了一个错误。
我的查询如下:
var result = db.Query(
@"SELECT e.event_id, e.title, e.description, e.event_start, e.event_end, e.group_id, e.recurring
FROM event e
JOIN Membership m ON m.GroupID = e.group_id
WHERE e.recurring = 0
AND m.UserID = @0
AND e.event_start >= @1
AND e.event_end <= @2
UNION ALL
SELECT e.event_id, e.title, e.description, DATEADD(week, w.weeks, e.event_start), DATEADD(week, w.weeks, e.event_end), e.group_id, e.recurring
FROM event e
JOIN Membership m ON m.GroupID = e.group_id
CROSS JOIN
( SELECT row_number() OVER (ORDER BY Object_ID) AS weeks
FROM SYS.OBJECTS
) AS w
WHERE e.recurring = 1
AND m.user_id = 4;
AND e.event_start >= @4
AND e.event_end <= @5", userID, start, end, userID, start, end
);
错误是:
System.Data.SqlServerCe.SqlCeException (0x80004005):有一个 解析查询时出错。 [令牌行号=10,令牌行偏移量= 38,错误的令牌 = OVER ] at System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 小时)在 System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()
我将查询保存在 .cs 文件中。我被告知我应该创建一个存储过程,因为 SQL Server compact 可能不支持 OVER 函数,这是正确的吗?如何为此查询创建存储过程?
【问题讨论】:
-
Simon,您似乎遇到了很多想要在 SQL Server Compact 中使用 SQL Server 语法的情况,但语法并非 100% 兼容。您是否考虑过在 SQL Server 2012 中使用 Express 或新的 LocalDb?在回答之前观看此演示文稿:channel9.msdn.com/posts/SQL11UPD03-REC-07
-
在标签中添加了精简版...我认为 CE 根本不支持
row_number。
标签: c# sql sql-server stored-procedures sql-server-ce