2015-04-30 13 views
5

मैं SQL Server 2012 का उपयोग कर रहा हूं, और मेरा मुख्य लक्ष्य प्रोग्रामेटिक रूप से DROP ROLE है, लेकिन यह तब तक नहीं किया जा सकता जब तक कि भूमिका खाली न हो, तो मैं टी-एसक्यूएल का उपयोग कैसे कर सकता हूं ताकि पहले सभी सदस्यों को छोड़ सकें कोई भूमिका?सभी सदस्यों को छोड़ने के लिए ALTER ROLE

  • मैं एक भूमिका के सभी सदस्यों को पा सकते हैं:

    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] 
    
  • सदस्य का उपयोग कर छोड़ा जा सकता है:

    ALTER ROLE role_name DROP MEMBER user_name 
    

मैं इन दोनों कैसे जोड़ सकते हैं? या क्या मैं ऐसा करने का एक और तरीका है जिसे मैं करने की कोशिश कर रहा हूं?

(इसके अलावा, मैं नहीं यकीन है कि अगर यह महत्वपूर्ण है हूँ, लेकिन मैं एक इकाई की रूपरेखा 6 प्रवास में इस का उपयोग किया जाएगा)

उत्तर

6

यहाँ मैं दो कैसे गठबंधन देगा:

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); 

यह आपकी क्वेरी में प्रत्येक पंक्ति (उपयोगकर्ता) के लिए आपके ALTER ROLE कमांड के साथ एक स्ट्रिंग बनाता है, उन सभी को एक साथ सभी बड़े आदेशों के साथ एक साथ जोड़ता है और फिर गतिशील रूप से उन्हें निष्पादित करता है।

+0

धन्यवाद, यह अच्छी तरह से काम किया। – jjj

1

एसक्यूएल सर्वर में विशेष sp (sp_droprolemember) है। मुझे उम्मीद है, यह आपको समस्या हल करता है।

+1

sp_droprolemember को बहिष्कृत किया गया है - इसके बजाय ALTER ROLE का उपयोग करें (https://msdn.microsoft.com/en-us/library/ms188369.aspx) – nonpoliticaltag

संबंधित मुद्दे