2014-10-07 42 views
0

我有一個存儲過程來獲取一個id。它CONCAT與第一名稱爲「石,冷」的姓氏,並通過了_fullname,當我的var_dump給在存儲過程中使用CONCAT和MySQL數據庫的語法問題

字符串(13)石相比,冷

它應該給一個ID

IF NOT ISNULL(_fullname) THEN 
    SET _fullname = TRIM(_fullname); 
    SET clause = CONCAT(clause , ' AND CONCAT(c.lname, ', ', c.fname) LIKE CONCAT('%',_fullname,'%')'); 
END IF; 

當我在MySQL中嘗試相同的查詢時,它工作得很好,但在過程中不起作用。我確定問題是存儲過程中的語法。

+3

首先,正確地標記問題(MySQL或SQL服務器?)。其次,使用雙單引號在字符串常量中轉義單引號。 – 2014-10-07 15:02:57

+0

@GordonLinoff thnx回覆,但它仍然不工作!你能否詳細說明一下。 – 2014-10-07 15:12:15

回答

0

嘗試:

DELIMITER // 

DROP PROCEDURE IF EXISTS `sp_test`// 

CREATE PROCEDURE `sp_test`(IN `_fullname` VARCHAR(20)) 
BEGIN 
    DECLARE `clause` VARCHAR(500) DEFAULT ''; 
    IF NOT ISNULL(`_fullname`) THEN 
    SET `_fullname` := TRIM(`_fullname`); 
    SET `clause` := CONCAT(`clause`, ' AND CONCAT(`c`.`lname`, '', '', `c`.`fname`) LIKE ''', '%', `_fullname`, '%'''); 
    END IF; 
    SELECT `clause`; 
END// 

DELIMITER ; 

SQL Fiddle demo