у меня 3 таблицы.
1. Users 4 Cols
UserID - User - RealName - Flags
2. UsersGroups 2 Cols
UserID - GroupID
3. Groups 3 Cols
GroupID - Group - Flags
и я хочу установить флаги в таблице User
для User = 'Administrator'
и применить то же самое к таблице Group
.
У меня работает следующий SQL, но у меня также есть несколько флагов, которые я должен применить, используя побитовые операторы.
Я обнаружил, что мой код действительно повторяется, поэтому мне было интересно, может ли кто-нибудь предложить какой-либо рефакторинг, который не повлияет на производительность.
Код:
--- SET FLAG 1
UPDATE User
SET User.Flags = User.Flags | 2048
WHERE User.Value = 'Administrator'
UPDATE dbo.Group
SET dbo.Group.Flags =
(Select e.Flags FROM dbo.User p INNER JOIN dbo.UserInGroup pe ON p.UserID = pe.UserID
INNER JOIN dbo.Group e ON e.GroupID = pe.GroupID
WHERE p.Value = 'Administrator') | 2048
FROM dbo.User p INNER JOIN dbo.UserInGroup pe ON p.UserID = pe.UserID
INNER JOIN dbo.Group e ON e.GroupID = pe.GroupID
WHERE p.Value = 'Administrator'
-- SET FLAG 2
UPDATE User
SET User.Flags = User.Flags | 512
WHERE User.Value = 'Administrator'
UPDATE dbo.Group
SET dbo.Group.Flags =
(Select e.Flags FROM dbo.User p INNER JOIN dbo.UserInGroup pe ON p.UserID = pe.UserID
INNER JOIN dbo.Group e ON e.GroupID = pe.GroupID
WHERE p.Value = 'Administrator') | 512
FROM dbo.User p INNER JOIN dbo.UserInGroup pe ON p.UserID = pe.UserID
INNER JOIN dbo.Group e ON e.GroupID = pe.GroupID
WHERE p.Value = 'Administrator'