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 の出力です。

#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 に答える