我有一个安全表,其中包含组和用户的列表,每个组和用户都有按位整数权限。对于每个给定的用户,我想对其所有组及其个人权限记录(如果存在)执行按位 AND 操作。
当然,我可以轻松地在代码中执行此操作,但我宁愿在数据库中执行此操作,因为我正在查询权限的可能有数千个项目。
我更喜欢基于集合的解决方案而不是游标。
请注意,我无法控制架构。
如果您想要按位或单位值的所有值,则可以使用基于集合的解决方案:执行按位求和 https://stackoverflow.com/questions/4438769/performing-a-bitwise-sum/4438852#4438852
或者,您可以使用不太优雅的方法对非唯一值集进行基于模糊集的按位运算:
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 http://web.archive.org/web/20110430135922/http://www.eggheadcafe.com/software/aspnet/33139293/bitwise-aggregate-function.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)