在查询中使用MySQL变量

时间:2010-03-31 20:55:09

标签: mysql

我正在尝试使用此MySQL查询:

SET @a:=0; UPDATE tbl SET sortId=@a:=@a+1 ORDER BY sortId;

不幸的是我收到了这个错误:
“必须定义参数'@a'”

是否可以将命令批处理为1个查询,或者我是否需要为此创建存储过程?

3 个答案:

答案 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();