【发布时间】:2020-05-04 23:59:08
【问题描述】:
早上,
我有两张桌子。第一个表(SecurityRules)是安全规则列表:
ID srRight srRole
1 4 NULL
2 2 32
第二个表(项目)是项目列表:
ProjId prRight prRole
1 0 NULL
2 0 32
3 0 NULL
我需要使用 SecurityRules 中的所有记录更新项目列表,并根据两个表中的角色更新 prRight 列。 Right 值是按位组织的。
我使用以下 SQL 更新查询来执行此操作:
Update Projects
-- Perform binary sum
Set prRight = prRight | srRight
From SecurityRules
Where (srRole is Null) --Always apply srRight if srRole is not defined
OR (srRole is Not Null And srRole=prRole) --Apply right if both roles are equal
预期结果是:
ProjId prRight prRole
1 4 NULL
2 6 32
3 4 NULL
但我明白了:
ProjId prRight prRole
1 4 NULL
2 4 32
3 4 NULL
看起来更新仅由 SecurityRules 表的第一条记录完成。我需要将 SecurityRules 表中的所有记录应用于 Project 表的所有记录。 如果我创建一个简单的循环并手动循环来自 SecurityRules 的所有记录,它工作正常,但如果您必须将 10 个安全规则与 2000 个项目进行比较,则性能非常差......
有什么建议吗?
阿诺
【问题讨论】:
标签: sql sql-server sql-update