使用Mysql存储过程检查行是否存在无效

时间:2012-12-23 17:53:34

标签: mysql stored-procedures

在mysql命令提示符下,我运行:

SELECT EXISTS (SELECT 1 FROM test1 WHERE name1 like '%Nadiya%')

返回

EXISTS (SELECT 1 FROM test1 WHERE name1 like '%Nadiya%')
1

但是以下程序不会作为Exists打印。我需要进入IF声明。 请让我知道IF内部可能会有什么变化。

DELIMITER //
CREATE PROCEDURE verifyAndUpdate30(in searchName  varchar(12), in searchId   bigint, inout result int)
BEGIN
    IF ( SELECT EXISTS (SELECT 1 FROM test1 WHERE name1 like '%searchName%') ) THEN 
        SELECT 'EXISTS';
        UPDATE TEST SET testFlag=1 WHERE id=searchId;
        SET result=1;
    ELSE
        SELECT 'DOES NOT EXISTS';
    END IF; 

    SELECT result;
END 
//
DELIMITER ;

致电程序:

SET @increment = 0;
call verifyAndUpdate30('Nadiya', 5532, @increment);

2 个答案:

答案 0 :(得分:2)

您需要使用LIKE

以艰难的方式构建CONCAT('%', searchName, '%')字符串
,,,
IF ( SELECT EXISTS (
    SELECT 1
    FROM test1
    WHERE name1 like CONCAT('%', searchName, '%')   -- Build %searchName% from parts
 ) ) THEN 
,,,

答案 1 :(得分:1)

你需要连接。

由于searchName可以作为硬编码字符串,因此请以这种方式替换您的查询:

CONCAT('%', searchName, '%')

完整代码

DELIMITER //
CREATE PROCEDURE verifyAndUpdate30(in searchName  varchar(12), in searchId   bigint, inout result int)
BEGIN
    IF ( SELECT EXISTS (SELECT 1 FROM test1 WHERE name1 like CONCAT('%', searchName, '%')) ) THEN 
        SELECT 'EXISTS';
        UPDATE TEST SET testFlag=1 WHERE id=searchId;
        SET result=1;
    ELSE
        SELECT 'DOES NOT EXISTS';
    END IF; 

    SELECT result;
END 
//
DELIMITER ;

在MySQL中查看有关CONCAT的更多信息。