将以逗号分隔的ID作为varchar发送到MySQL存储过程时,我无法将该字符串用作IN子句的一部分,并带有正确的结果返回。该字符串被截断为小数点,并且只使用第一个值。在存储过程中为'in'子句使用MySQL用户定义的变量
我想我可以通过准备然后执行语句来解决这个问题,但是这仍然只返回匹配的第一个值。
代码示例可能会使事情更清晰一些。我想下面的转换成一个存储过程(与条款动态):
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');
谢谢,这是我担心的 - 至少现在我知道了。 – Nick 2009-10-21 17:20:42