在一个 SQL 文件中合并两个或多个 MySQL 程序
Combining two or more MySQL procedures in one SQL file
我正在创建一个 c# 程序,它读取 .sql
文件并自动执行它。问题是,.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' 类型的未处理异常。命令执行期间遇到致命错误
解决此问题的一种方法是在 .sql
文件本身中使用定界符,但在 --
之后使用它,这样 mysql 将忽略它作为注释。
例如,如果您的分隔符是 <NewQuery>
,只需在 .sql
文件中写入 -- <NewQuery>
。
在您的 C# 程序中,您可以通过 -- <NewQuery>
分隔符和 运行 单独分割 .sql
文件。
在 .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
添加到您的连接字符串。
我正在创建一个 c# 程序,它读取 .sql
文件并自动执行它。问题是,.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' 类型的未处理异常。命令执行期间遇到致命错误
解决此问题的一种方法是在 .sql
文件本身中使用定界符,但在 --
之后使用它,这样 mysql 将忽略它作为注释。
例如,如果您的分隔符是 <NewQuery>
,只需在 .sql
文件中写入 -- <NewQuery>
。
在您的 C# 程序中,您可以通过 -- <NewQuery>
分隔符和 运行 单独分割 .sql
文件。
在 .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
添加到您的连接字符串。