我正在尝试向我的 MYSQL 数据库中的延期交货表中添加一个新的延期交货订单。我遇到的问题是,当我尝试选择 Supplier_ID 以将其添加到延期交货表时,程序给我一个错误,提示“子查询返回超过 1 个值”。
供应商表(不确定如何正确构建它)
| Supplier_ID | SupName |
| 1| EWS |
| 6 | Franklin Bakery |
延期交货表
| BackOr_ID | Supplier_ID | BackOr_Org_Date | Sup_Name |
我目前使用的 MYSQL 查询是:
CREATE DEFINER=`root`@`%` PROCEDURE `sp_BackOrder`(
in supname varchar(50),
in dat date
)
BEGIN
insert into Back_Order
(
Supplier_ID,
BackOr_Org_Date,
Sup_Name
)
values
(
(select Supplier_ID from Supplier Where SupName = supname),
dat,
supname
);
END
使用查询的 C# 代码是:
MySqlCommand cmd = new MySqlCommand("sp_BackOrder", new MySqlConnection(*Connection String*));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new MySqlParameter("supname", Supp_Name)); //Supp_Name is the Supplier Name (a string variable)
cmd.Parameters.Add(new MySqlParameter("dat", DateTime.Now.ToShortDateString())); //dat is the date the Order is placed
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
我得到的唯一错误是子查询(我假设是选择查询)返回超过 1 个值。我试着环顾四周,甚至查看了 Stackoverflow,但找不到任何解决问题的方法。任何帮助将不胜感激。
最佳答案
它需要看起来像:
delimiter $$
CREATE DEFINER=`root`@`%` PROCEDURE `sp_BackOrder`
( in p_supname varchar(50),
in p_dat date
)
BEGIN
insert into Back_Order(Supplier_ID, BackOr_Org_Date, Sup_Name)
select Supplier_ID, p_dat, p_supname from Supplier Where SupName = p_supname;
END$$
delimiter ;
或
CREATE DEFINER=`root`@`%` PROCEDURE `sp_BackOrder`
( in p_supname varchar(50),
in p_dat date
)
BEGIN
insert into Back_Order(Supplier_ID, BackOr_Org_Date, Sup_Name)
select Supplier_ID, p_dat, p_supname from Supplier Where SupName = p_supname;
END
两者的交易相同,具体取决于您的DELIMITER
需求。
关于c# - 是什么导致了 "Subquery returns more than 1 row"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39656148/