mysql 存储过程更新所有行而不是 1

0 mysql sql stored-procedures

这是MySQL 的过程:

    CREATE DEFINER = `root`@`%` PROCEDURE `NewProc`(IN comp_id VARCHAR(40))
    BEGIN
    ...
    UPDATE tbl_complaint SET DIDM_Docket_No = '2013-12-12' WHERE Comp_ID = comp_id;
    END;
Run Code Online (Sandbox Code Playgroud)

这是我调用程序时的样子:

    call gen_docketno('{74651651-9D76-C973-175A-97B9B78608A5}')
Run Code Online (Sandbox Code Playgroud)

是不是因为参数值中的括号和破折号导致程序无法正确更新?因为当我在 sql 查询中运行它时,它可以工作,但在存储过程中却不能。

    UPDATE tbl_complaint SET DIDM_Docket_No = '2013-12-12' WHERE Comp_ID = '{BF16E293-6CD2-8BC3-91B1-CF5AC70A090B}';
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何解决这个问题吗?

Joh*_*Woo 5

重命名您的参数comp_id。它与您的列名发生冲突,导致它更新所有记录,

CREATE  PROCEDURE `NewProc`(IN _comp_id VARCHAR(40))
BEGIN
...
     UPDATE tbl_complaint 
     SET DIDM_Docket_No = '2013-12-12' 
     WHERE Comp_ID = _comp_id;
END;
Run Code Online (Sandbox Code Playgroud)