SQL select从字符串到tinyint的“in”转换

SQL select从字符串到tinyint的“in”转换,sql,sql-server,select,Sql,Sql Server,Select,我有一个要从中选择数据的表。一个列“myCol”的数据类型为tinyint。它的值从1到8 在我的select中,我有一个数据类型为varchar的变量@myVar,其值类似于“1,2”或“3,4” 现在我试着做这样的事情: select * from myTable where myCol in (@myVar) 不幸的是,我得到了以下错误: 将varchar值“2,3”转换为数据类型tinyint时,转换失败 如何更改选择,使其正常工作 保持select性能尽可能高是非常重要的 因为只有1

我有一个要从中选择数据的表。一个列“myCol”的数据类型为tinyint。它的值从1到8

在我的select中,我有一个数据类型为varchar的变量@myVar,其值类似于“1,2”或“3,4”

现在我试着做这样的事情:

select * from myTable
where myCol in (@myVar)
不幸的是,我得到了以下错误:

将varchar值“2,3”转换为数据类型tinyint时,转换失败

如何更改选择,使其正常工作


保持select性能尽可能高是非常重要的

因为只有1到8之间的值,所以可以使用字符串搜索方法。差不多

select * from myTable
where CHARINDEX(cast(mycol as varchar), @myVar) > 0

如果您创建了一个类似于中接受答案的函数,那么您将能够执行以下操作:

select * from myTable t
    inner join dbo.fnSplitStringAsTable(@myVar, ',') s on t.myCol = s.Value

请注意,根据您的语法和错误消息,我假设使用SQL Server。

将数据更改为包含标记的枚举

[Flags]
public enum ContactMethod
{
  Value1 = 1,
  Value2 = 2,
  Value3 = 4,
  Value4 = 8,
  Value5 = 16,
  Value6 = 32,
  Value7 = 64,
  Value8 = 128
}


select * from mytable where myCol | 3 = 3 

然后将返回值为1或2的所有行

谢谢您的回答。我们建议这张桌子很大。在一个单独的表中拆分字符串并进行内部联接是性能杀手吗?谢谢你的帮助?@dotnetsharp它不应该破坏性能,不。它没有Juergen的答案那么紧凑,但是可能会更快,因为需要更少的强制转换。最好的答案是尝试一下,然后发现——我很想自己知道。