2009-07-29 16 views
37

मैं यह पता लगाने की कोशिश कर रहा हूं कि SQL सर्वर में डेटाबेस भूमिका मौजूद है या नहीं। मैं ऐसा कुछ करना चाहता हूं:मैं कैसे निर्धारित करूं कि SQL सर्वर में डेटाबेस भूमिका मौजूद है या नहीं?

if not exists (select 1 from sometable where rolename='role') 
begin 
CREATE ROLE role 
    AUTHORIZATION MyUser; 
end 

मुझे किस तालिका/proc का उपयोग करना चाहिए?

उत्तर

58
SELECT DATABASE_PRINCIPAL_ID('role') 
--or 
IF DATABASE_PRINCIPAL_ID('role') IS NULL 

USER_ID बहिष्कृत और टूट सकता है। CREATE ROLE एसक्यूएल इंगित करता है 2005+ तो यह ठीक है

+0

@Klaus: कोशिश करते हैं और एक भूमिका + ही नाम के साथ उपयोगकर्ता पैदा करते हैं। यह असफल हो जाएगा। https://msdn.microsoft.com/en-us/library/ms187328.aspx "name" colun अद्वितीय – gbn

+1

अच्छा बिंदु है। हां, नाम उपयोगकर्ताओं, समूहों और भूमिकाओं में अद्वितीय होना चाहिए। मैंने अपनी पिछली टिप्पणी हटा दी। धन्यवाद। –

23
if not exists (select 1 from sys.database_principals where name='role' and Type = 'R') 
begin 
CREATE ROLE role 
    AUTHORIZATION MyUser; 
end 
+3

यह विफल रहता है यदि आपके पास ऐसा उपयोगकर्ता है जो समान "भूमिका" नाम होता है। अजीब है, लेकिन आपको 100% – gbn

+0

@ Klaus पर काम करने के लिए "= 'R'" को हटाना होगा, मुझे इसके साथ क्या करना है? – gbn

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

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