我在数据库中有一个列,它在 nvarchar 字符串中存储了一个数字数组,值看起来像这样
"1,5,67,122"
现在,我想在使用 IN 语句的查询中使用该列值
但是,如果我有类似的东西
WHERE columnID IN (@varsArray);
它不起作用,因为它将 @varsArray 视为字符串并且无法将其columnID
与 INT 类型进行比较。
如何将该变量转换为可与 IN 语句一起使用的变量?
为此,您需要动态 SQL。
exec('select * from your_table where columnID in (' + @varsArray + ')')
或者,您可以通过在 Internet 上查找拆分用户定义函数来解析变量,然后将每个数字输入临时表,然后加入临时表
但上面回答的人是正确的,这是糟糕的数据库设计
创建一个表,以便您可以根据某个 id 加入它,所有答案都将在一个表中(临时或非临时)
另一种选择是使用用户定义的表值函数,该函数将分隔字符串作为输入并生成一个表,每个值一行作为其输出(请参阅This SO question),然后使用Cross Apply加入表本身到该 UDF 的输出。
无论如何,这些技术对于您的技巧包很有用。
不幸的是,有时我们不得不面对糟糕的数据设计......
我已经通过构建和调用一个 SQL 函数来完成此操作,该函数将数字拆分并在表中返回它们。然后您可以针对该临时表运行您的 columnID 以查看它是否存在。