REPEAT
FETCH Randomizer INTO cursor_id;
IF NOT done THEN
UPDATE tempNews SET RandNum = rand();
WHERE id = @cursor_id;
END IF;
UNTIL done END REPEAT;
Вы используете переменную сеанса, унифицированную @cursor_id
вместо объявленной процедуры переменной cursor_id
Перепишите следующим образом:
REPEAT
FETCH Randomizer INTO cursor_id;
IF NOT done THEN
UPDATE tempNews SET RandNum = rand();
WHERE id = cursor_id;
END IF;
UNTIL done END REPEAT;
или даже лучше, просто избавьтесь от своего временного стола, как вы и предлагали.
Что касается этого утверждения:
Но я не хочу ничего менять слишком радикально, потому что сейчас я просто пытаюсь конвертировать БД. Я вернусь и оптимизирую этот материал позже.
SQL Server
и MySQL
- это значительно различных платформ.
Вы уже слишком резко изменили все, когда решили переключиться.
В большинстве случаев вы не можете просто скопировать старый код и вбить его в MySQL
.
Возможно, он будет работать между несколькими версиями SQL Server
, поскольку, по крайней мере, предпринимаются попытки поддерживать некоторую совместимость между версиями одной и той же платформы, но это определенно не сработает для переноса на MySQL
.
Я бы взял все фрагменты вашего кода и убедился, что он выдает те же результаты , что и старый код, используя методы настолько простыми и предсказуемыми, насколько это возможно.
В вашем случае переменная @cursor_id
может быть инициализирована ранее в коде, а ее значение может использоваться хранимой процедурой, что может привести к неожиданному поведению любого типа.
Это связано с тем, что в SQL Server
переменные имеют область действия пакета, а в MySQL
они имеют область действия сеанса.