Если я правильно понимаю, у вас есть прямое соответствие в столбце srRole
, а затем правило по умолчанию, которое применяется ко всем.
Самый простой способ (в данном случае) - использовать join
s в update
:
update p
Set prRight = p.prRight | srn.srRight | coalesce(sr.srRight, 0)
From Projects p join
SecurityRules srn
on srRole is null left join
SecurityRules sr
on sr.srRole = p.prRole;
Здесь - это db <> скрипка.
Возможно, вам будет безопаснее, если не использовать правило по умолчанию. И это prRight
может быть NULL
:
update p
Set prRight = coalesce(p.prRight, 0) | coalesce(srn.srRight, 0) | coalesce(sr.srRight, 0)
From Projects p left join
SecurityRules srn
on srRole is null left join
SecurityRules sr
on sr.srRole = p.prRole;
Тем не менее, я бы порекомендовал вам рассмотреть возможность пересмотра вашей модели данных. Бит-трюк - это очень весело на языках программирования. Тем не менее, это обычно не лучший подход в базах данных. Вместо этого используйте таблицы соединений, если ваше приложение не нуждается в битовых переключателях.