2016-04-11 2 views
0

У меня есть определенная пользователем роль OrderEntry в моей базе данных, которая имеет только два члена. Отбрасывая их индивидуально, чтобы, в свою очередь, отказаться от роли, это не большая проблема. Однако я вижу, что это проблема, если возникла ситуация, когда вам нужно было отбросить роль, и сначала нужно удалить всех участников из этой роли. Есть ли простой способ сделать это для дальнейшего использования. Я имею в виду с точки зрения SQL скриптЕсть ли простой способ удалить всех участников из роли

+0

Ваш вопрос путается, вы хотите удалить строки этой роли? или вы хотите удалить роль этих пользователей? –

+0

Из того, что я понимаю о том, чтобы отбросить роль, вам не нужно иметь членов в этой роли. Путем того, чтобы удалить члена в моей ситуации, будет ALTER ROLE OrderEntery DROP MEMBER JohnDoe. Затем, когда член сброшен, я могу отбросить роль DROP ROLE OrderEntery. Если в этой роли есть члены multipe, и я хочу удалить их, есть простой способ удалить их все или все они должны быть удалены отдельно? – secretTina

+0

Вы хотите удалить членов той же роли? я прав? –

ответ

0
select 'ALTER ROLE ' + QUOTENAME(rp.name) + ' DROP MEMBER ' + QUOTENAME(mp.name) 
from sys.database_role_members drm 
    join sys.database_principals rp on (drm.role_principal_id = rp.principal_id) 
    join sys.database_principals mp on (drm.member_principal_id = mp.principal_id) 
WHERE rp.name = 'OrderEntery ' 
order by rp.name 

вы можете создать все ALTER РОЛЬ DROP УЧАСТНИКА Синтаксис как это. Возьмите запрос результата и запустите его.

Результат должен выглядеть следующим образом

ALTER ROLE [OrderEntery ] DROP MEMBER [user1] 
ALTER ROLE [OrderEntery ] DROP MEMBER [user2] 
ALTER ROLE [OrderEntery ] DROP MEMBER [user3] 
ALTER ROLE [OrderEntery ] DROP MEMBER [user4] 

Edit:

Из MSDN:

+0

Это немного над моей головой на данный момент. Я займу некоторое время, чтобы разгадать его. – secretTina

+0

Это не так сложно, в основном с запросом, вы получаете всех пользователей от определенной роли (используя предложение where). Затем вы добавляете текст для создания синтаксиса 'alter role ... drop member ...', чтобы вы получали ALTER DROP для каждого члена той роли, которую вы хотите. – CiucaS

+0

Несомненно ... Я просто не знаю, что происходит с sys.database_role_members .... Я новичок – secretTina