1

我将我的参数传递为“Suburbun”、“Indigo”,以检索与下面在 MySql 中创建的存储过程中的两个活动匹配的记录。

CREATE PROCEDURE `DemoSP`(Campaign VARCHAR(3000))
BEGIN
    SET @query = CONCAT('Select * from vicidial_log WHERE campaign_id IN (?)');
  PREPARE stmt FROM @query;
  SET @CampaignID = Campaign;
  EXECUTE stmt USING @CampaignID;
  DEALLOCATE PREPARE stmt;
END;

它没有给出任何行!

但是当我在 SP 中只通过“郊区”时,它会给出 6 行!

我哪里错了?

- 回答 !

我尝试了 Lee Fentress 在http://www.poolofthought.com/index.php/2008/12/28/a-comma-seperated-list-as-parameter-to-mysql-stored-procedure/和 peterm 回答中的评论反映了类似的编码,

有效!

谢谢,但与 SQL Server 相比,我发现这个负面标记。

啧啧,谢谢各位!!

4

3 回答 3

0

尝试这个:

没有必要使用PREPARE STATEMENT. 您可以使用FIND_IN_SET()函数获得结果

SELECT * FROM vicidial_log WHERE FIND_IN_SET(campaign_id, Campaign)
于 2014-01-04T08:53:29.320 回答
0

USING在这种情况下您将无法使用。您可以构建完整的查询字符串并在没有参数的情况下执行它

DELIMITER $$
CREATE PROCEDURE DemoSP(Campaign VARCHAR(3000))
BEGIN
  SET @query = CONCAT('SELECT * FROM vicidial_log WHERE campaign_id IN (', Campaign, ')');
  PREPARE stmt FROM @query;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

注意:确保您传入的分隔值Campaign被正确引用(就像您所说的那样)并且值中的引号(如果有的话)被转义。

这是SQLFiddle演示

于 2014-01-04T09:20:46.287 回答
-1

尝试这个

"Select * from vicidial_log WHERE campaign_id IN ('?')"

代替

'Select * from vicidial_log WHERE campaign_id IN (?)'
于 2014-01-04T08:51:03.490 回答