У меня есть 3 стола.Как рефакторировать повторяющиеся запросы на обновление SQL?
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'