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