簡體   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