2012-12-17 49 views
0
CREATE PROCEDURE reset_xyz_autoincrement 
BEGIN 

    SELECT @max := MAX(ID)+ 1 FROM ABC; 

    PREPARE stmt FROM 'ALTER TABLE XYZ AUTO_INCREMENT = ?' 
    EXECUTE stmt USING @max 

    DEALLOCATE PREPARE stmt; 

END $$ 

我把代碼從這裏: How to Reset an MySQL AutoIncrement using a MAX value from another table?MySQL不接受這個程序。你能幫忙嗎?

這是MySQL輸出:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN 

    SELECT @max := MAX(ID)+ 1 FROM ABC' at line 2 

回答

0

嘗試CREATE PROCEDURE語句前加上delimiter $$

編輯:

我對什麼是你的程序的當前版本的評論失去了聯繫,但對你的SELECT語句中的錯誤:

SELECT @yourVar := MAX(ID)+ 1 FROM ABC; 

應該成爲

SELECT MAX(ID) + 1 INTO @yourVar FROM ABC; 

另外,我想你應該DECLARE myVar INT(假設它是一個整數)之前,並請注意max也是一個MySQL的關鍵字,所以我將避免在我的程序中使用該名稱。

+0

我甚至在發佈之前,但仍然沒有運氣嘗試過。我得到並再次出現錯誤: '#1064 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'BEGIN SELECT @max:= MAX(id)+ 1 FROM movies'附近使用正確的語法;在第2行準備好'ALTER TABL' 我也試過用'delimiter;'也沒有運氣... –

1

試試這個

 CREATE PROCEDURE reset_xyz_autoincrement 
      (username varchar(64),password varchar(64))  // here you use your columns 
     BEGIN 

編輯:

試試這個

 DROP PROCEDURE IF EXISTS reset_xyz_autoincrement; 
    CREATE PROCEDURE reset_xyz_autoincrement (userid INT) 
     BEGIN 
+0

我仍然得到和我的問題一樣的錯誤... –

+0

仍然沒有運氣。我得到錯誤「」附近的3號線 '選擇@curID:= MAX(movies.id)FROM電影;' –

+0

現在的錯誤是不靠近的開始,所以它固定在第一個錯誤,那麼錯誤現在在SELECT –

1

你應該做如下:

  1. 使用功能撐
  2. 我們e每個語句分號。

分隔符$$
CREATE PROCEDURE reset_xyz_autoincrement() BEGIN

 SELECT @max:=MAX(ID)+ 1 FROM Company_Master; 

     PREPARE stmt FROM 'ALTER TABLE Dept_Master AUTO_INCREMENT = ?'; 
     EXECUTE stmt USING @max ; 

     DEALLOCATE PREPARE stmt; 

    END$$ 
相關問題