4

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,我希望插入语句插入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);
4

2 回答 2

15

它会起作用,但你需要加上括号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)
);
于 2012-11-12T07:53:52.607 回答
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

另一项建议 - 不要为字段名称和参数使用相同的名称。

于 2012-11-12T07:54:52.183 回答