Я пытаюсь увеличить столбец с помощью переменной @count в SQL. Я пробовал несколько попыток, которые я перечислю ниже, которые все приводят к: <код> Код ошибки: 1064 У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом ...

Сначала было:

SET @count = 65;
UPDATE table t
SET t.Revision = CHAR(@count)
, @count = @count + 1
WHERE t.hidden = 0;

Я пытаюсь увеличить каждую строку в настоящее время в качестве доказательства концепции, что это работает.

Второе было:

DECLARE t CURSOR FOR
SELECT * FROM table
WHERE t.hidden = 0;

OPEN t;
FETCH NEXT FROM t;

WHILE @@FETCH_STATUS = 0
    BEGIN
        UPDATE table t2 SET t2.Revision = 'D' WHERE t2.id1 = t.id1 AND t2.id2 = t.id2;
    END;
END

CLOSE t;
DEALLOCATE t;

Еще раз, я просто пытаюсь понять, могу ли я установить стандартную переменную с помощью цикла while, прежде чем реализовать инкремент как доказательство того, что он работает.

Я не уверен, почему ни одна из этих попыток терпит неудачу, но любая помощь будет оценена.

2
Kevin Minds 31 Окт 2019 в 18:56

2 ответа

Лучший ответ

Вы можете попробовать следующее решение:

SET @count = 64; -- so the first increment is 65 (starting on A).

UPDATE table_name t
  SET t.Revision = CHAR(@count:=@count+1)
WHERE t.hidden = 0;

Или (короче):

UPDATE table_name t, (SELECT @count:=64) t2
SET t.Revision = CHAR(@count:=@count+1)
WHERE t.Hidden = 0;

демо на dbfiddle.uk

0
Sebastian Brosch 31 Окт 2019 в 16:18

Вот как должен работать ваш первый пример (внутри некоторого цикла):

Сначала вы устанавливаете значение счетчика, затем вы обновляете

SET @count = 65;
UPDATE CUSTOMER t
SET t.LName = CONVERT(@count, char)
where t.FName = 'a';

... а затем увеличить этот счет, и вы обновите снова ...

set @count = @count + 1;
UPDATE CUSTOMER t
SET t.LName = CONVERT(@count, char)
where t.FName = 'a';

Но это должно быть в процедуре, например.

Вот DEMO. Это небольшой пример, и я надеюсь, вы найдете его полезным. Ура!

0
VBoka 31 Окт 2019 в 16:31