如何在更新语句中使用 SQL 变量递增

How to increment using a SQL variable within an update statement

我正在尝试使用 SQL 中的 @count 变量来增加一列。我已经尝试了多次尝试,我将在下面列出所有结果: Error Code: 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 ...

首先是:

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 循环设置一个标准变量,作为它有效的概念证明。

我不确定为什么这些尝试都失败了,但我们将不胜感激。

您可以尝试以下解决方案:

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;

demo on dbfiddle.uk

这是您的第一个示例的工作方式(在某个循环内):

首先设置计数值,然后更新

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。我只是一个小例子,希望对您有所帮助。 干杯!