我在下面有这个存储过程,如果我的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);
任何想法如何解决这个问题?
答案 0 :(得分:1)
你的ids不是整数。您需要使用单引号传递它们或执行以下操作:
set @sql = CONCAT('select * from PostComment where PostId in (''',
replace(postIdList, ',', ''','''),
''') ');
也就是说,用单引号,逗号,单引号替换每个逗号。然后在列表的开头和结尾加上引号。