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 $$

我从这里获取代码: 如何使用另一个表中的 MAX 值重置 MySQL AutoIncrement?

这是 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 
4

3 回答 3

1

你应该遵循:

  1. 使用函数大括号
  2. 每个语句使用分号。

分隔符 $$
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$$
于 2012-12-17T13:27:27.757 回答
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
于 2012-12-17T11:55:06.240 回答
0

尝试在语句delimiter $$之前添加。CREATE PROCEDURE

编辑:

我在您的程序的当前版本的评论中迷失了方向,但您的SELECT陈述中有一个错误:

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

应该成为

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

另外,我认为你应该DECLARE myVar INT(假设它是一个整数)之前,请注意这max也是一个 MySQL 关键字,所以我会避免在我的过程中使用该名称。

于 2012-12-17T11:46:48.203 回答