什么是下面的sql语句的问题

时间:2018-03-03 14:56:36

标签: mysql stored-procedures

我正在尝试创建一个存储过程,但我不知道是什么问题,SQLyog不断给我错误

DELIMITER //
CREATE PROCEDURE sim_management_update()
BEGIN
UPDATE bf_sim_management,test_sims SET 
bf_sim_management.`sim_company_id`=test_sims.`id` WHERE 
bf_sim_management.`sim_company_id`=test_sims.`display_name`
END //
DELIMITER;

单独的更新语句工作正常,错误是

查询:CREATE PROCEDURE sim_management_update()BEGIN UPDATE bf_sim_management,test_sims SET bf_sim_management。sim_company_id = test_si ...

错误代码:1064 您的SQL语法有错误;检查与MariaDB服务器版本对应的手册,以便在第4行的“END”附近使用正确的语法

执行时间:0秒 转移时间:0秒 总时间:0秒

2 个答案:

答案 0 :(得分:1)

代码实际上看起来不错,但我建议将其编写为:

DELIMITER //
CREATE PROCEDURE sim_management_update()
BEGIN
    UPDATE bf_sim_management sm JOIN
           test_sims ts
           ON sm.sim_company_id = ts.display_name
       SET sm.sim_company_id = ts.id;
END //
DELIMITER ;

注意:

  • SET看起来很奇怪,因为我认为name是一个字符串而id是一个数字。通常,数字不会分配给字符串。
  • 使用正确的JOIN语法。
  • 表别名使查询更易于编写和阅读。
  • 我在update
  • 的末尾添加了分号

答案 1 :(得分:1)

你应该:

  1. 在更新语句的末尾加上分号。
  2. DELIMITER;
  3. 之间加一个空格

    以下是修复的例子:

    DELIMITER //  
    CREATE PROCEDURE sim_management_update()
      BEGIN
        UPDATE bf_sim_management,test_sims SET 
          bf_sim_management.`sim_company_id`=test_sims.`id` WHERE 
          bf_sim_management.`sim_company_id`=test_sims.`display_name`;
      END //
    DELIMITER ;