我有一个存储过程,其中只有一行来删除给定条件的表中的记录。 当我使用' CALL storedprocname(' 2')'来调用storedproc时,它会删除表中的所有记录,即截断。我已独立运行删除语句,它工作正常,只删除指定的记录。我错过了什么吗? (我在macosx上使用mysqlworkbench)
DROP PROCEDURE IF EXISTS usp_DeleteCompany;
DELIMITER $$
CREATE PROCEDURE usp_DeleteCompany (IN CompanyId VARCHAR(3))
BEGIN
DELETE FROM Company WHERE CompanyId = (CAST(CompanyId AS UNSIGNED));
-- DELETE FROM Company WHERE CompanyId = (CAST('2' AS UNSIGNED))
END; $$
答案 0 :(得分:1)
为什么不直接将参数作为unsigned
传递给IN CompanyId UNSIGNED
?那时不需要铸造它。
另外,请考虑将参数名称更改为与实际列名CompanyId
不同的名称。
对我来说,好像您的delete
查询位于
DELETE FROM Company WHERE CompanyId = (CAST(CompanyId AS UNSIGNED));
转换为下面因为它将CompanyId
视为表的确切列,而不是传递给过程的实际参数,因此最终删除所有行。
DELETE FROM Company WHERE CompanyId = CompanyId;
请考虑在查询
中为Cid
等参数使用其他名称
CREATE PROCEDURE usp_DeleteCompany (IN Cid UNSIGNED)
BEGIN
DELETE FROM Company WHERE CompanyId = Cid;
END;