Вы можете попытаться убедиться, что после вашего END WHILE
стоит точка с запятой или, альтернативно, попытаться поставить BEGIN
и END;
вокруг ваших утверждений.
Однако мы действительно должны изучить метод на основе множеств.
РЕДАКТИРОВАТЬ: Если, как и в ваших комментариях, вы решили сделать это в 50 рядов строк ... по любой причине ... Вы можете попробовать выбрать количество строк, а затем разделить его на размер пакетачтобы получить переменную подсчета числа.
Например, если у вас есть 20 000 строк, и вы вставляете их порциями по 50, то вы знаете, что вам потребуется 400 итераций.Затем вы можете использовать int и делать WHILE X < 400
Это будет быстрее, чем делать EXISTS
запросы.
Непроверенный код (возможно, неверный синтаксис, но он должен дать вам идею)
INSERT INTO table2 (columns)
SELECT columns from table1
DECLARE @TopCount int DEFAULT 0;
DECLARE @CurrCount int DEFAULT 0;
SELECT @TopCount = COUNT(*) from table2
DO WHILE (@CurrCount < @TopCount)
BEGIN
INSERT INTO table3 (columns)
SELECT columns from table2 LIMIT 50
DELETE table2 LIMIT 50
SET @CurrCount = @CurrCount + 50
END;
END WHILE;
Это довольно глупо, имхо, но я все еще не понимаю твою цель.