2012-11-12 66 views
4

MySQL的例行:MySQL的常規INSERT語句

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 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); 
+0

當您嘗試時發生了什麼? – Barmar

+0

你的sql語法中有錯誤 –

+0

@paynet,因爲你沒有用括號括住'case'語句,請參閱下面的答案。 –

回答

10

它會工作,但你需要把括號圍繞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) 
); 
+0

謝謝,這個工程。 –

3

您可以使用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 

還有一個建議 - 不要對字段名稱和參數使用相同的名稱。

+0

我測試了這個,它也很棒。 –