0

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

现在,我想在使用 IN 语句的查询中使用该列值

但是,如果我有类似的东西

WHERE columnID IN (@varsArray);

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

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

4

4 回答 4

3

为此,您需要动态 SQL。

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

顺便说一句,在一列中存储超过 1 个值是糟糕的数据库设计!

于 2013-11-05T19:07:34.997 回答
0

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

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

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

于 2013-11-05T19:17:26.850 回答
0

另一种选择是使用用户定义的表值函数,该函数将分隔字符串作为输入并生成一个表,每个值一行作为其输出(请参阅This SO question),然后使用Cross Apply加入表本身到该 UDF 的输出。

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

于 2013-11-05T19:18:23.260 回答
0

不幸的是,有时我们不得不面对糟糕的数据设计......

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

于 2013-11-05T19:21:18.697 回答