我有一个安全表,其中包含一组组和用户,每个组和用户都有按位整数权限。对于每个给定的用户,我想对他们的所有组和他们的个人权限记录(如果存在)执行按位 AND。
当然,我可以在我的代码中轻松执行此操作,但我宁愿在数据库中执行此操作,因为可能有数千个项目我正在查询权限。
与游标相比,我更喜欢基于集合的解决方案。
请注意,我无法控制架构。
最佳答案
如果您想要按位或单位值的所有值,则可以使用基于集合的解决方案:Performing a bitwise sum
或者,您可以使用不太优雅的方法对非唯一值集进行基于模糊集合的位运算:
DECLARE @BitSum INT
SET @BitSum = 0
SELECT @BitSum = @BitSum | BitValue
FROM (
SELECT 1 AS BitValue
UNION SELECT 7
UNION SELECT 16
) AS SampleValues
SELECT @BitSum
编辑:Hugo Kornelis 在另一篇文章中非常全面地回答了这个问题:http://www.eggheadcafe.com/software/aspnet/33139293/bitwise-aggregate-function.aspx
关于sql-server - 我可以在 Sql Server 中对一组数字执行按位和运算吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5895174/