摘要:我试图将用户名添加到db.username_table中,其唯一ID递增1。但是,我仍然收到与CASE语句相关的错误1111。它应将第一个User_ID设为1,然后将所有其他新用户名设为max(user_id)+1。任何帮助将不胜感激!
背景:这是我的第一个MySQL项目-我在MS SQL方面有一些经验,这可能会阻碍我的工作。我用Google搜索了很多引用,并尽可能简化了代码,但是计数器的汇总返回了带有IF或CASE语句的1111错误。
DELIMITER $$
CREATE PROCEDURE db.add_user
(
in new_username varchar(45)
)
begin
-- Set Counter ID
declare new_user_id int;
set new_user_id = if(max(db.username_table.User_ID) is null, 1, max(db.username_table.User_ID) + 1);
-- Add Username with Counter
insert into db.username_table (user_id, username)
values (new_user_id, new_username);
END$$
DELIMITER ;
预期结果-将用户名添加到db.username_table中,其唯一ID递增1。
实际结果-错误1111。
答案 0 :(得分:0)
您正在使用功能MAX,但未在SQL语句中使用..,所以使用的max不正确。您需要选择一个以检索MAX(db.username_table.User_ID。)
declare new_user_id int;
select case when
max(ifnull(db.username_table.User_ID,0)) = 0
then 1
else max(db.username_table.User_ID) + 1 end
INTO new_user_id
from your_table ;
但是您是否可以仅需要User_id的自动递增列并避免使用此SP
CREATE TABLE your_table (
User_ID int(11) NOT NULL AUTO_INCREMENT,
....
)