我有一个Sql SP,它根据传递给SP的parms应用过滤器。 如果我只传递下面示例中的(2,4)有效值,它就可以工作。 但是如果没有传递过滤器,它应该返回所有行。 问题是检查 parmIndustryId为null或parmIndustryId为''空字符串,没有它可以工作,但我需要能够检查空字符串或null。
这是我得到的错误
错误代码:1241。操作数应包含1 色谱柱0.000秒
CREATE PROCEDURE `SearchIndustry`(
IN parmIndustryId TEXT
)
BEGIN
SET parmIndustryId ='2,4';
set @sql = CONCAT(' Select t1.*
FROM Industry t1
WHERE Active =1 AND(', parmIndustryId ,' is null OR t2.IndustryId IN( ', parmIndustryId, ' ))')
;
PREPARE q FROM @sql;
execute q;
END$$
DELIMITER ;
如何正确传递IN操作数过滤器的值?
答案 0 :(得分:1)
您可以使用FIND_IN_SET()
:
SELECT *
FROM Industry
WHERE Active = 1
AND (parmIndustryId IS NULL OR FIND_IN_SET(IndustryId, parmIndustryId))
编辑,如果可以传递空字符串,则可能还需要使用COALESCE
。如果是这样,这将有效:
SELECT *
FROM Industry
WHERE Active = 1
AND (COALESCE($parmIndustryId,'') = ''
OR FIND_IN_SET(IndustryId, $parmIndustryId));