我将参数传递为"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/中评论的那样,并且回答反映了类似的编码,
成功了!
谢谢,但与SQL Server相比,我发现这个负面标记。
哎呀,谢谢你们!!
您将无法使用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 演示
试试这个:
没有必要使用PREPARE STATEMENT
.您可以使用FIND_IN_SET()
函数获得结果
SELECT * FROM vicidial_log WHERE FIND_IN_SET(campaign_id, Campaign)
试试这个
"Select * from vicidial_log WHERE campaign_id IN ('?')"
而不是
'Select * from vicidial_log WHERE campaign_id IN (?)'