2011-06-02 19 views
7

मैं SQL Server 2005/2008 में किसी T-SQL स्क्रिप्ट के माध्यम से उपयोगकर्ता बनाने की कोशिश कर रहा हूं। मैं उपयोगकर्ता मौजूद है अगर जाँच करें और उपयोगकर्ता बनाने के लिए निम्नलिखित एसक्यूएल चलाते हैं यह नहीं है:SQL सर्वर: डेटाबेस में कोई Windows उपयोगकर्ता मौजूद है या नहीं, यह जांचने के लिए कि एक अलग उपयोगकर्ता नाम

IF NOT EXISTS (SELECT * 
       FROM sys.database_principals 
       WHERE name = N'MyDomain\MyUser') 
    BEGIN 
     CREATE USER [MyDomain\MyUser] FOR LOGIN [MyDomain\MyUser] WITH default_schema=[dbo]; 

     SELECT 1; 
    END 
ELSE 
    BEGIN 
     SELECT 0; 
    END 

दुर्भाग्य से, यह जब Windows खाते MyDomain \ MyUser पहले से डेटाबेस में है, लेकिन एक के अंतर्गत है काम नहीं करता है अलग नाम इसका एक उदाहरण होगा यदि MyDomain \ MyUser वह खाता था जिसने डेटाबेस बनाया था तो यह पहले ही डीबीओ उपयोगकर्ता के नीचे डेटाबेस में होगा।

Msg 15063, Level 16, State 1, Line 1 The login already has an account under a different user name.

मैं अगर खिड़कियों उपयोगकर्ता MyDomain \ MyUser पहले से डेटाबेस में एक उपयोगकर्ता भले ही वह किसी दूसरे उपयोगकर्ता के नाम के तहत है कैसे जांच कर सकते हैं: जब इस मामले मैं निम्नलिखित त्रुटि मिलती है?

उत्तर

14

खिड़कियों उपयोगकर्ता के लिए परीक्षण करने के बजाय नाम/user_id सिड का उपयोग कर sys.database_principals बनाम:

select * from sys.database_principals where sid = SUSER_SID(N'MyDomain\MyUser') 

के बाद से इस लॉगिन आईडी सिड का उपयोग करता है, यह नहीं बात नहीं क्या नाम था करता है डेटाबेस में मैप किया गया।

+0

शानदार जवाब। धन्यवाद डेमियन। –

+2

मुझे इसके बजाय 'sys.syslogins' से चयन करने की आवश्यकता है,' SUSER_SID' के लिए +1 –

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

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