使用MySQL存储过程的动态IN语句

时间:2014-03-06 01:18:11

标签: mysql stored-procedures

我想在MySQL存储过程中构建动态 IN语句。我已经尝试了很多方法,但我无法得到有效的东西。这是我最接近成功的,但它只处理列表中的第一个值: 103

我更喜欢使用存储过程而不是在客户端完全构建这个SQL语句然后执行它。有没有人知道在存储过程中动态构建SQL语句的一般规则,特别是关于IN语句?

call foo2('103,104,105,106');

这是存储过程:

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `foo2`(
szList VARCHAR(256)
)
BEGIN

SELECT 
    E_Id, EX_Value

FROM 
    E

WHERE 
    EX_Value IN (szList);

END

1 个答案:

答案 0 :(得分:1)

如何使用FIND_IN_SET for MySQL。我认为此链接可能会对您有所帮助(How to pass a list of IDs to MySQL stored procedure?

关键部分是定义

szList as TEXT 

并使用

FIND_IN_SET(Ex_Value, szlist) 

而不是Ex_Value IN(szlist)