我正在尝试使用此MySQL查询:
SET @a:=0; UPDATE tbl SET sortId=@a:=@a+1 ORDER BY sortId;
不幸的是我收到了这个错误:
“必须定义参数'@a'”
是否可以将命令批处理为1个查询,或者我是否需要为此创建存储过程?
答案 0 :(得分:5)
您将变量赋值放在了错误的位置:
SET @a:=0; UPDATE tbl SET @a:=sortId=@a+1 ORDER BY sortId;
答案 1 :(得分:2)
我认为你需要一个存储过程来处理任何类型的状态。有没有理由你不愿意创建一个?
另外你如何运行这段代码?它是在SQL Server Manager之类的编辑器中还是作为程序中的字符串?
答案 2 :(得分:2)
您的查询对我来说很好。我尝试从MySQL Query Browser运行它:
CREATE TABLE tbl (Id INT NOT NULL, SortId INT NOT NULL);
INSERT INTO tbl (Id, SortId) VALUES (1, 9), (2, 22), (3, 13);
SET @a:=0;
UPDATE tbl SET sortId=@a:=@a+1 ORDER BY sortId;
SELECT * From tbl;
结果:
Id sortId
1 1
2 3
3 2
请注意,从MySQL Query Browser运行查询时,每行应输入一个查询,而不是在一行中输入两个查询。如果你想把它放在一个存储过程中(可能是个好主意),你可以像这样创建它:
DELIMITER //
CREATE PROCEDURE updateSortIds()
BEGIN
SET @a:=0;
UPDATE tbl SET SortId=@a:=@a+1 ORDER BY SortId;
END //
DELIMITER ;
要执行它,请使用:
CALL updateSortIds();