繁体   English   中英

什么导致“子查询返回超过 1 行”错误?

[英]What causes the "Subquery returns more than 1 row" error?

我正在尝试向我的 MYSQL 数据库中的 Back Order 表添加一个新的 Back Order。 我遇到的问题是,当我尝试选择供应商 ID 以将其添加到延期交货表时,程序给我一个错误,提示“子查询返回的值超过 1”。

供应商表(不确定如何正确构建它)

| 供应商_ID | 名称 |

| 1| 预警系统 |

| 6 | 富兰克林面包店 |

延期交货表

| 返回Or_ID | 供应商_ID | 返回Or_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需求,两者中的交易相同。

过程的参数名supname和列名SupName相同。 将参数名称更改为列名称以外的名称。

CREATE DEFINER=`root`@`%` PROCEDURE `sp_BackOrder`(
in selectedSupname 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 = selectedSupname),
dat,
selectedSupname
);

END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM