首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个或多个MySQL过程组合在一个SQL文件中

问将两个或多个MySQL过程组合在一个SQL文件中
EN

Stack Overflow用户
提问于 2015-05-07 04:43:45
回答 2查看 229关注 0票数 0

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

代码语言:javascript
复制
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.MySqlClient.MySqlException”类型的未处理异常发生在MySql.Data.dll中。命令执行过程中遇到的致命错误

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-08 03:24:10

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

代码语言:javascript
复制
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添加到连接字符串中。

票数 0
EN

Stack Overflow用户

发布于 2015-05-07 08:34:52

解决这一问题的一种方法是在.sql文件本身中使用分隔符,但在--之后使用分隔符,这样mysql就会忽略它作为注释。

例如,如果分隔符为<NewQuery>,只需在.sql文件-- <NewQuery>中写入即可。

在您的c#程序中,您可以将.sql文件拆分为-- <NewQuery>分隔符,并单独运行每个段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30092104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档