2015-04-30 19 views
5

Sto utilizzando SQL Server 2012 e il mio obiettivo principale è programmaticamente DROP ROLE, ma non è possibile farlo a meno che il ruolo non sia vuoto, quindi come posso utilizzare T-SQL per eliminare tutti i membri di un ruolo?ALTER ROLE per eliminare tutti i membri

  • posso trovare tutti i membri di un ruolo:

    SELECT members.[name] 
    FROM sys.database_role_members AS rolemembers 
        JOIN sys.database_principals AS roles 
         ON roles.[principal_id] = rolemembers.[role_principal_id] 
        JOIN sys.database_principals AS members 
         ON members.[principal_id] = rolemembers.[member_principal_id] 
    WHERE roles.[name][email protected] 
    
  • I membri possono essere eliminato utilizzando:

    ALTER ROLE role_name DROP MEMBER user_name 
    

Come posso combinare questi due? O c'è un altro modo per fare ciò che sto cercando di fare?

(Inoltre, non sono sicuro se questo è importante, ma userò questo in una migrazione Entity Framework 6)

risposta

6

Ecco come vorrei unire le due cose:

DECLARE @rolename sysname = 'role_name'; 
DECLARE @cmd AS NVARCHAR(MAX) = N''; 

SELECT @cmd = @cmd + ' 
    ALTER ROLE ' + QUOTENAME(@rolename) + ' DROP MEMBER ' + QUOTENAME(members.[name]) + ';' 
FROM sys.database_role_members AS rolemembers 
    JOIN sys.database_principals AS roles 
     ON roles.[principal_id] = rolemembers.[role_principal_id] 
    JOIN sys.database_principals AS members 
     ON members.[principal_id] = rolemembers.[member_principal_id] 
WHERE roles.[name][email protected] 

EXEC(@cmd); 

Questo crea una stringa con il comando ALTER ROLE per ogni riga (utente) nella query, concatenandoli tutti insieme in una stringa grande con tutti questi comandi e quindi li esegue dinamicamente.

+0

Grazie, ha funzionato bene. – jjj

1

C'è uno speciale sp (sp_droprolemember) nel server sql. Spero, risolva il tuo problema.

+1

sp_droprolemember è deprecato - utilizzare invece ALTER ROLE (https://msdn.microsoft.com/en-us/library/ms188369.aspx) – nonpoliticaltag

Problemi correlati