在IN语句中使用字符串数组

时间:2013-11-05 19:04:58

标签: sql tsql

我在数据库中有一个列,它在nvarchar字符串中存储一个数字数组,值看起来像这样 "1,5,67,122"

现在,我想在使用IN语句

的查询中使用该列值

但是,如果我有类似

的话
WHERE columnID IN (@varsArray);

它不起作用,因为它将@varsArray视为字符串,无法将其与INT类型的columnID进行比较。

如何将该变量转换为可与IN语句一起使用的内容?

4 个答案:

答案 0 :(得分:3)

你需要动态SQL。

exec('select * from your_table where columnID in (' + @varsArray + ')')

而BTW在列中存储多于1个值的DB设计是不好的!

答案 1 :(得分:0)

或者,您可以通过在Internet上查找拆分用户定义函数来解析变量,并将每个数字输入临时表,然后加入临时表

但是上面回答的人是正确的,这是糟糕的数据库设计

创建一个表,以便您可以根据某个ID加入它,并且所有答案都将在表格中(临时或非临时)

答案 2 :(得分:0)

另一个选项是使用User Defined Table-Valued函数,该函数将分隔字符串作为输入,并生成一个表,每个值一行作为其输出(参见This SO question),然后使用{{ 3}},将表本身连接到该UDF的输出。

无论如何,这些技巧对于你的技巧包都很有用。

答案 3 :(得分:0)

不幸的是,我们有时会被迫反对糟糕的数据设计......

我已经通过构建和调用SQL函数来完成此操作,该函数将数字拆分并将它们返回到表中。然后,您可以针对该临时表运行columnID以查看它是否存在。