【问题标题】:Mysql Stored Proc Passing String ListMysql存储过程传递字符串列表
【发布时间】:2014-06-08 19:39:19
【问题描述】:

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

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

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$$

我就是这样称呼它的 调用 GetComments( 'fff78ee0-396b-4300-952b-eee72d65261a,fff517dc-a7b7-441e-85bb-b5134828c0c9');

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

【问题讨论】:

    标签: mysql sql database stored-procedures


    【解决方案1】:

    您的 id 不是整数。您需要用单引号将它们传入或执行以下操作:

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

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

    【讨论】:

      猜你喜欢
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      相关资源
      最近更新 更多