ALTER TABLE
debe tener valores literales en el momento en que se analiza la instrucción (es decir, en el momento de la preparación).
No puede poner variables o parámetros en la declaración en el momento del análisis, pero puede poner variables en la declaración antes analizar el tiempo. Y eso significa usar SQL dinámico:
SET @new_index = (SELECT MAX(id) FROM sales );
SET @sql = CONCAT('ALTER TABLE sales AUTO_INCREMENT = ', @new_index);
PREPARE st FROM @sql;
EXECUTE st;