Ошибка разбора запроса в SQL Server Compact - PullRequest
0 голосов
/ 11 марта 2012

Я выполняю свой запрос с использованием 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] в System.Data.SqlServerCe.SqlCeCommand.ProcessResults (Int32 ч) в System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan ()

* * 1010

Я держу запрос в файле .cs. Мне сказали, что я должен создать хранимую процедуру, так как SQL Server compact может не поддерживать функцию OVER, это правильно? Как я могу создать хранимую процедуру для этого запроса?

Ответы [ 2 ]

1 голос
/ 11 марта 2012

После FROM вы можете перечислить несколько таблиц, разделенных запятыми, и результатом будет CROSS JOIN всех этих таблиц.

Но вы не можете использовать синтаксис запятой после JOIN. Вместо этого выписать CROSS JOIN:

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
0 голосов
/ 11 марта 2012

Кажется, что ROW_NUMBER и другие оконные функции не поддерживаются в Sql Server CE 4.0: (

...