C# · 12月 31, 2021

c# – 在SQL Server中反汇编位标志枚举

我在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中选择与第一个表中给定行上的任何标志匹配的所有行.