gpt4 book ai didi

mysql - 如果过程中给出 null,则不更新

转载 作者:行者123 更新时间:2023-11-29 09:42:20 24 4
gpt4 key购买 nike

我知道一种解决此问题的方法,但我想知道解决我的问题的干净且最佳的方法。我正在使用 INSERT INTO 和 ON DUPLICATE KEY UPDATE。有时没有给出值,但我仍然必须将其传递到过程的参数中,否则会失败。所以我一直在传递一个空值,但这会用空值更新字段,并且我将丢失数据。因此,如果将空值传递给某个字段,我想“忽略”该字段。换句话说,只是不更新​​它或获取当前值并将其传入。

我可以使用多个 IF 语句来检查某个值是否为 null,但这个过程大约有 20 个值长,这看起来很荒谬且无端。如果有更好的方法,我知道可以采取不同的方式。

为了简单起见,我只会包含部分过程。

PROCEDURE `p_my_record_create`(
IN in_group varchar(255),
IN in_package varchar(255),
IN in_type enum('A', 'M'),
IN in_uid varchar(255),
IN in_member_id int(11),
IN in_first_name varchar(255)
)
BEGIN
INSERT INTO myDatabase.my_record
(`group`, `package`, `type`, `uid`, `member_id`, `first_name`)
VALUES
(in_group, in_package, in_type, in_uid, in_member_id, in_first_name)
ON DUPLICATE KEY UPDATE
`group` = in_group,
`package` = in_package,
`type` = in_type, #if this is passed in as null then I would like for it to be "ignored" or if any of them are.
`uid` = in_uid,
`client_member_id` = in_client_member_id,
`first_name` = in_first_name;

SELECT
record_id
FROM
myDatabase.my_record
WHERE
record_id = LAST_INSERT_ID();
END

如果有一种简单的方法可以在 MySQL 中完成此操作,请赐教,这将非常有帮助。谢谢。

最佳答案

PROCEDURE `p_my_record_create`(
IN in_group varchar(255),
IN in_package varchar(255),
IN in_type enum('A', 'M'),
IN in_uid varchar(255),
IN in_member_id int(11),
IN in_first_name varchar(255)
)
BEGIN
INSERT INTO myDatabase.my_record
(`group`, `package`, `type`, `uid`, `member_id`, `first_name`)
VALUES
(in_group, in_package, in_type, in_uid, in_member_id, in_first_name)
ON DUPLICATE KEY UPDATE
`group` = in_group,
`package` = COALESCE(in_package, `package`),
`type` = COALESCE(in_type, `type`),
`uid` = in_uid,
`client_member_id` = in_client_member_id,
`first_name` = COALESCE(in_first_name, `first_name`);

SELECT
record_id
FROM
myDatabase.my_record
WHERE
record_id = LAST_INSERT_ID();
END

关于mysql - 如果过程中给出 null,则不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56349570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com