【发布时间】:2019-02-14 08:53:55
【问题描述】:
我很难获得以我需要的方式更新表的过程。我在本地计算机上使用 phpmyadmin。在 phpmyadmin 中,我可以将以下代码放入 SQL 选项卡中,并且将更新一行:
SET `adjCost` = 22.05 WHERE `Name` LIKE CONCAT('magic', '%') AND `idKey` = '2016fulham02345';
正如预期的那样,如果名称以 magic 开头并且 idKey 是“2016fulham02345”,那么 adjCost 会更新为 22.05。
会有 2 到 50 行具有相同的 idKey。名称永远不会在具有相同 idKey 的集合中重复。
我创建了一个带有以下参数的过程:
IN idK VARCHAR 255 Charset
IN aName VARCHAR 255 Charset
IN cost FLOAT 5,2
BEGIN
UPDATE `raceresults` SET `adjCost` = cost WHERE `Name` LIKE CONCAT(aName, '%') AND `idKey` = idK;
END
当我运行此过程时,它会更新 idKey = idk 的所有 adjCost 并且(似乎)忽略 name 参数。
我已尝试先连接名称字符串:
BEGIN
SELECT CONCAT(aName, '%') INTO @str;
UPDATE `raceresults` SET `adjCost` = cost WHERE `Name` = @str AND `idKey` = idK;
END
但无济于事。
我浏览了 w3schools、stackoverflow 和 google 并没有找到答案。
我的问题是:
如何更正我的程序以使其按我的意愿工作?
更新:根据要求。
CREATE DEFINER=`root`@`localhost` PROCEDURE `importAltUpdateAjdCost`(IN `idK` VARCHAR(255), IN `aName` VARCHAR(255), IN `cost` FLOAT(5,2))
NO SQL
BEGIN
UPDATE `costingPP`
SET `adjCost` = cost
WHERE
`Name` LIKE CONCAT(aName, '%')
AND
`idKey` = idK;
END
为此,我在 phpmyadmin 上的程序列表中选择了导出。
【问题讨论】:
-
出于好奇,SELECT @str := CONCAT(aName, '%');也失败了?
-
它没有改变任何 adjCost。
-
这些真的用在过程定义中了吗? IN idK VARCHAR 255 Charset IN aName VARCHAR 255 Charset IN cost FLOAT 5,2 如果您真的需要帮助,请粘贴您的实际过程定义 SQL
-
我是 MySQL 新手。我很乐意发布实际的程序定义,但老实说,我不知道那是什么。
-
请编辑您帖子的“我使用以下参数创建了一个过程”部分并使用以“CREATE ...”开头的实际过程创建查询