2012-03-11 80 views
0

我正在使用WebMatrix運行我的查詢,我認爲這是正確的,但是出現錯誤。解析SQL Server Compact中的查詢時出錯

我的查詢如下:

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.CompileQueryPlan() System.Data.SqlServerCe.SqlCeCommand.ProcessResults(的Int32小時)

我在.cs文件中持有查詢。我被告知我應該創建一個存儲過程,因爲SQL Server compact可能不支持OVER函數,這是正確的嗎?我如何爲這個查詢創建一個存儲過程?

+1

西蒙的支持,你似乎遇到了很多情況下要熬到要在SQL Server Compact中使用SQL Server語法,並且語法不是100%兼容。您是否考慮在SQL Server 2012中使用Express或新的LocalDb?在回答之前,請觀看此演示文稿:http://channel9.msdn.com/posts/SQL11UPD03-REC-07 – 2012-03-11 16:00:13

+0

在標籤中增加了精簡版...我假設CE根本不支持'row_number'。 – Andomar 2012-03-11 16:03:25

回答

1

在FROM之後,可以列出以逗號分隔的多個表,並且結果將是所有這些表的CROSS JOIN。

但是,JOIN後不能使用逗號語法。相反,寫出來的JOIN CROSS:

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

感謝您的回覆。我可以運行此查詢的最佳/最簡單的方法是什麼我的服務器?在米它是完全使用WebMatrix/SQL Server CE製作的。我擔心它會花費大量的工作來遷移一切,並更改我的代碼! :( – 2012-03-11 16:19:35

+0

如果你正在尋找一個星期的數字列表,創建一個表並填充數字1到53應該做的伎倆? – Andomar 2012-03-11 22:18:57

+0

我已經遷移到SQL Server現在,我得到錯誤「>不正確的語法可能是這樣的:'m.user_id = 4;'SQL Server將解釋一個關鍵字'WHERE'。不知道爲什麼會出現這種情況? – 2012-03-11 22:57:02

0

似乎ROW_NUMBER等窗口功能並不由SQL Server CE 4.0 :(

+0

:(有什麼辦法讓我解決這個問題嗎? – 2012-03-11 16:13:56

+0

你使用row_number來產生序列數字 - 可能你需要哈我已經在靜態表中生成了它。這不是優雅的解決方案,但它比我想象的要好。 – STO 2012-03-11 16:20:53