一尘不染

对存储过程参数SQL使用“泪N”语句

sql

我有一个带有一个名为“ @IDs”的输入参数的存储过程。这是从我的应用程序中填充的,该应用程序将以以下格式填充它:“
2、30、105”。当然,此参数中的值的数量会有所不同(例如:有时@ID有时为‘100,2005,2,510’)我的存储过程非常简单。我有一个名为“人”的表。我正在尝试编写此查询:

Select * From Persons Where P_Id in (@IDs)

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


阅读 119

收藏
2021-05-16

共1个答案

一尘不染

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

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 ;

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

2021-05-16