带有CASE的MySQL例程INSERT语句

时间:2012-11-12 07:49:45

标签: mysql insert

MySQL例程:

DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `INSERT_Employee_Info`(
IN lname varchar(64),
IN fname varchar(64),
IN mname varchar(64)
)
BEGIN
INSERT INTO tbl_employee_info(lname, fname, mname)
VALUES(lname, fname, mname);
END

有时,值lname,fname和mname可能只包含但不为null,我希望insert语句插入NULL而不是''值。

我有以下想法但我非常怀疑它会起作用:

INSERT INTO tbl_employee_info(lname, fname, mname)
VALUES(CASE lname WHEN '' THEN NULL ELSE lname END,
CASE fname WHEN '' THEN NULL ELSE fname END,
CASE mname WHEN '' THEN NULL ELSE mname END);

2 个答案:

答案 0 :(得分:12)

它会起作用,但你需要在case

附近加上括号
INSERT INTO tbl_employee_info(lname, fname, mname)
VALUES
(
   (CASE lname WHEN '' THEN NULL ELSE lname END),
   (CASE fname WHEN '' THEN NULL ELSE fname END),
   (CASE mname WHEN '' THEN NULL ELSE mname END)
);

答案 1 :(得分:4)

您可以使用IF()功能 -

CREATE DEFINER=`root`@`%` PROCEDURE `INSERT_Employee_Info`(
  IN p_lname varchar(64),
  IN p_fname varchar(64),
  IN p_mname varchar(64)
)
BEGIN    
  INSERT INTO tbl_employee_info(lname, fname, mname)
  VALUES(
    IF(p_lname = '', NULL, p_lname),
    IF(p_fname = '', NULL, p_fname),
    IF(p_mname = '', NULL, p_mname));
END

还有一个建议 - 不要对字段名称和参数使用相同的名称。