我在sql Server数据库中有一个INT列,它存储与位标志枚举相关的值.例如,如果枚举是:
[Flags()] public enum UserType { StandardUser = 1,Admin = 2,SuperUser = 4 }
那么sql Server中的列可能保留值为5.
我需要做的是从另一个表中选择所有的行,其中包含有关UserType的更多详细信息,所以使用值为5的示例,我想从ID 1和4的第二个表中选择行.
有没有人知道以这种方式打破数字的聪明方法 – 理想的方法应该在一定程度上递归,因为这是一个非常简化的例子,实际的表/枚举要大得多.
解决方法
SELECT * FROM first_table f JOIN second_table s ON s.ID & f.Flags <> 0 WHERE f.something = something
这将从second_table中选择与第一个表中给定行上的任何标志匹配的所有行.