This question already has answers here:
Parameterize an SQL IN clause
                                
                                    (40个答案)
                                
                        
                                6年前关闭。
            
                    
我有一个带有一个名为“ @IDs”的输入参数的存储过程。这是从我的应用程序中填充的,该应用程序将以以下格式填充它:“ 2、30、105”。当然,此参数内的值的数量会有所不同(例如:有时@ID会是'100,2005,2,510')。我的存储过程非常简单。我有一个名为“人”的表。我正在尝试编写此查询:

Select * From Persons Where P_Id in (@IDs)


P_ID是表中的主键。我得到的错误是“将varchar值“ 2、3、4”转换为数据类型int时转换失败。”任何建议将不胜感激。谢谢。

最佳答案

您可能需要准备一份声明。这个想法是建立选择语句,然后执行它。这是一个如何做的例子...

USE mydb;

DROP PROCEDURE IF EXISTS execSql;
DELIMITER //
CREATE PROCEDURE execSql (
                 IN sqlq VARCHAR(5000)
                  ) COMMENT 'Executes the statement'
BEGIN
  SET @sqlv=concat(concat('select abc from yourtable where abc in (',sqll),')');
  PREPARE stmt FROM @sqlv;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END //
DELIMITER ;


只需将查询更改为您要执行的查询即可。

关于mysql - 对存储过程参数SQL使用“IN”语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15260853/

10-12 12:40
查看更多