2012-09-16 62 views
1

任何人都可以告訴我爲什麼我在MySql中收到此錯誤: 錯誤代碼:1064.您的SQL語法有錯誤;檢查對應於你的MySQL服務器版本在1號線存儲過程中的concat有問題

這裏使用近「NULL」正確的語法手冊是我的代碼:

CREATE PROCEDURE `msgBoardGetComments2`(

IN _StoryID INT, 
IN _RowNum INT 

) 
BEGIN 

DECLARE _sql VARCHAR(1000); 

    SET _sql := CONCAT('SELECT c.CommentText, c.CommentDate, a.UserName 
     FROM comments c 
     LEFT JOIN accounts a 
      ON c.UserID = a.UserID 
      LEFT JOIN stories s 
        ON c.StoryID = s.StoryID 
     WHERE c.StoryID = ',_StoryID, ' 
     ORDER BY c.CommentDate DESC 
     LIMIT 10 
     OFFSET ', _RowNum); 

PREPARE stmt1 FROM @_sql; 
EXECUTE stmt1; 

END

回答

0

我相信你可以接受_RowNumNULL時發生錯誤。如果是這種情況,您可以嘗試添加一個IF條件來選擇包含OFFSET _RowNum,如果_RowNumNULL。您可以通過執行之前打印您的查詢測試:

SELECT _sql; 
--PREPARE stmt1 FROM @_sql; 
--EXECUTE stmt1; 

而且,我還沒有看到使用的變量賦值下劃線(_),或許這也可以扮演這個角色?

+0

njk,謝謝你試圖幫助我。當我用_RowNum的數字值調用函數時,它仍然會給出相同的錯誤。此外,我一直使用變量和下劃線一段時間,從來沒有任何問題,所以我不認爲這是問題的一部分。我對這些類型的動態查詢有點新意,所以我不能真正弄清楚問題是什麼 – user1675852

+0

@ user1675852如果你只是需要返回一個結果集,我建議你使用一個函數,而不是存儲過程。 – Kermit

+0

它是一個動態網站的一部分,我將使用相同的Proc爲多個不同網站上的不同帖子加載評論,因此我認爲將它作爲一個程序保持有意義。我弄明白了,這很簡單。我只是忽略了它不熟悉動態查詢。我只需要將_sql放在Set語句的前面,我也不必聲明_sql。感謝您的輸入。 – user1675852