【问题标题】:Combining two or more MySQL procedures in one SQL file在一个 SQL 文件中组合两个或多个 MySQL 过程
【发布时间】:2015-05-07 04:43:45
【问题描述】:

我正在创建一个读取.sql 文件并自动执行它的c# 程序。问题是,.sql 文件里面应该是一个程序。我创建了 20 多个程序。当我的.sql 文件中只有一个过程时,我可以成功执行它。如何将所有程序合并到一个 .sql 文件中?我尝试了以下方法:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateSettledMemo`(res_id varchar(45))
BEGIN
UPDATE memo_reservation SET reservation_memostat = 'SETTLED' WHERE
reservation_id = res_id;
END$$

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateUnsettledMemo`(res_id varchar(45))
BEGIN
UPDATE memo_reservation SET reservation_memostat = 'UNSETTLED' WHERE
reservation_id = res_id;
END$$

但没有创建任何内容。它返回的唯一错误是MySql.Data.dll 中发生了“MySql.Data.MySqlClient.MySqlException”类型的未处理异常。命令执行过程中遇到致命错误

【问题讨论】:

  • 你得到什么样的错误?
  • “不起作用” 不能很好地描述您观察到的实际行为。它会返回错误吗?是否创建了第一个过程,但没有创建其他过程?关于c#程序如何执行文件内容的信息很少。这是调用 mysql 命令行客户端,作为外部可执行文件吗? “不起作用”是对问题描述的反感。
  • 您可能想问自己一个问题,“我真的需要从 .sql 文件中读取吗?”我之所以这么说是因为使用带有 SqlParameters 的 SqlCommands 以编程方式执行此操作会更好。

标签: c# mysql stored-procedures


【解决方案1】:

解决此问题的一种方法是在 .sql 文件本身中使用分隔符,但在 -- 之后使用分隔符,以便 mysql 将其作为注释忽略。
例如,如果您的分隔符是<NewQuery>,则只需在.sql 文件中写入-- <NewQuery>
在您的 c# 程序中,您可以通过 -- <NewQuery> 分隔符拆分 .sql 文件并单独运行每个段。

【讨论】:

    【解决方案2】:

    .sql 文件中,删除每个过程开头的DELIMITER $$。此外,在每个过程结束时将$$ 替换为END 之后的分号(;)。您在.sql 文件中的查询应该是:

    CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateSettledMemo`(res_id varchar(45))
    BEGIN
    UPDATE memo_reservation SET reservation_memostat = 'SETTLED' WHERE
    reservation_id = res_id;
    END;
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateUnsettledMemo`(res_id varchar(45))
    BEGIN
    UPDATE memo_reservation SET reservation_memostat = 'UNSETTLED' WHERE
    reservation_id = res_id;
    END;
    

    当您在连接中使用变量时会显示致命错误。 MySQL 看到@data 并期望找到一个名为@data 的参数。当它找不到一个时,它会抛出一个异常。

    要解决此问题,请将allow user variables=true 添加到您的连接字符串中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-20
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      相关资源
      最近更新 更多