Mysql存储过程传递字符串列表

时间:2014-06-08 19:39:20

标签: mysql sql database stored-procedures

我在下面有这个存储过程,如果我的PostId是Integer 字段,它会起作用 我发送postIdList作为逗号分隔字符串' 1,2,3,4' ... 但是,如果我将PostId更改为GUID(char(36),它对我不起作用。 它给我一个语法错误说

  

"错误代码:1064。您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   语法使用'" 2d9d3ebc-6c9f-467a-8181-8a38891756b)'在第1行"

CREATE DEFINER=`root`@`%` PROCEDURE `GetComments`(
         IN  postIdList TEXT    
    )
BEGIN
set @sql = CONCAT('select * from PostComment where PostId in (', postIdList, ') ');
PREPARE q FROM @sql;
execute q;
END$$

这就是我所说的 CAll GetComments( ' fff78ee0-396b-4300-952b-eee72d65261a,fff517dc-a7b7-441e-85bb-b5134828c0c9&#39);

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你的ids不是整数。您需要使用单引号传递它们或执行以下操作:

set @sql = CONCAT('select * from PostComment where PostId in (''',
                  replace(postIdList, ',', ''','''),
                  ''') ');

也就是说,用单引号,逗号,单引号替换每个逗号。然后在列表的开头和结尾加上引号。