当将一串逗号分隔的id(作为varchar)发送到
MySQL存储过程时,我不能将该字符串用作IN子句的一部分,并返回正确的结果.字符串被截断为十进制,只使用第一个值.
我以为我可以通过准备然后执行语句来解决这个问题,但这仍然只返回第一个值的匹配.
代码示例可能会使事情更清晰一些.我想将以下内容转换为存储过程(使用in子句动态):
select id, name from cities where id in (1,2,3);
这是我使用预准备语句的存储过程:
DROP PROCEDURE IF EXISTS `cities_select_by_ids` $$
CREATE PROCEDURE `cities_select_by_ids`(
in _cityIds varchar(1000)
)
BEGIN
SET @cityIds = _cityIds;
PREPARE stmt FROM '
select
id,
name
from cities
where id in (?);
';
EXECUTE stmt USING @cityIds;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
调用存储过程我只获得城市’1’的匹配:
call cities_select_by_ids_prepare('1, 2, 3');
这是表和数据的创建和插入脚本:
CREATE TABLE cities (
id int(10) unsigned NOT NULL auto_increment,
name varchar(100) NOT NULL,
PRIMARY KEY (`id`)
);
insert into cities (name) values ('London'), ('Manchester'), ('Bristol'), ('Birmingham'), ('Brighton');