我有一张表,我想从中选择数据。一个coloumn'myCol'的数据类型为tinyint。它的值为1到8。
在我的选择中,我有一个带有数据类型varchar()的变量@myVar,其值为'1,2'或'3,4'。
现在我正在尝试这样做:
select * from myTable
where myCol in (@myVar)
不幸的是我收到以下错误:
将varchar值'2,3'转换为数据类型tinyint时转换失败。
如何更改它的工作选择?!
保持选择性能尽可能高是非常重要的!
答案 0 :(得分:1)
由于您只有1到8的值,因此可以使用字符串搜索方法。像
这样的东西select * from myTable
where CHARINDEX(cast(mycol as varchar), @myVar) > 0
答案 1 :(得分:0)
如果你创建一个类似于Splitting of comma separated values中接受的答案的功能,你就可以这样做:
select * from myTable t
inner join dbo.fnSplitStringAsTable(@myVar, ',') s on t.myCol = s.Value
请注意,我假设SQL Server,基于您的语法和错误消息。
答案 2 :(得分:0)
将您的数据更改为包含已标记的枚举
[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的所有行