2016-10-03 83 views
0

我试图将可变数量的数字传递给存储过程以限制其输出。假设我有6个部门,编号分别为1,2,3,4,5,6。我希望用户输入各种数字。所以他们可能会选择1,3,6或者2,4或者3,或者他们想看的任何东西。这可以像存储过程的WHERE子句中的变量一样传递给IN语句吗?如果不是,那么可以怎么做呢?我想尽可能保持简单。谢谢!将变量传递给SQL语句中的IN语句存储过程

+0

占位符只能表示SINGLE值。您无法在一个占位符中传递多个值,例如'where where foo IN(?)'并传入'1,2,3'将被执行,就像它被写入'WHERE foo ='1,2,3''一样。当你有任意数量的占位符时,你不能使用“预先”准备好的语句。您必须使用尽可能多的占位符动态构建您的查询字符串,然后使用1:1映射传递它们。 –

+1

一种选择是将逗号分隔的数字串转换为临时表,然后在查询中连接或以其他方式使用该临时表。一种方法:http://www.codeproject.com/Tips/584680/Using-comma-separated-value-parameter-strings-in-S –

+3

什么是您的DBMS? – Serg

回答

0

将值数组传递给存储过程的通用且健壮的SQL方法需要多个语句。

  1. 将您的值插入(临时)表。
  2. 调用你的存储过程应该包含连接逻辑到这个表。
  3. 删除最近从表中添加值(如有必要)

您可能需要附上这些语句放入交易。