2012-05-13 18 views
23

MSDN प्रलेखीकरण SUSER_SNAME समारोह के लिए कहते हैं:टी-एसक्यूएल: SUSER_SNAME बनाम SUSER_NAME?

एक उपयोगकर्ता की सुरक्षा पहचान संख्या (SID) से लॉगिन पहचान नाम देता है।

अधिक से अधिक है, यह SUSER_NAME समारोह के लिए कहते हैं:

रिटर्न उपयोगकर्ता के लॉगिन पहचान नाम।

बहरहाल, जब मैं निम्नलिखित SQL कथन निष्पादित मैं मिल ही परिणाम:

SELECT SUSER_NAME(); 
SELECT SUSER_SNAME(); 

तो, मतभेद क्या हैं, और जो एक मैं का उपयोग करना चाहिए? क्या कोई ऐसी स्थिति है जिसका उपयोग मुझे एक दूसरे के बजाय करना चाहिए?

कृपया सलाह,

अग्रिम धन्यवाद :)

उत्तर

26

आप एक तर्क के बिना समारोह को कॉल करते हैं वे दोनों एक ही परिणाम प्रदान करेंगे। अलग तर्क ले लेकिन वे करते हैं:

  • SUSER_SNAME()
  • SUSER_NAME तर्क के रूप में एक लॉगिन का varbinary(85) SID लेता है() एक लॉगिन का integer principal_id लेता

आप इस तरह की पुष्टि कर सकते हैं:

select suser_name(principal_id) 
,  suser_name(sid) 
,  suser_sname(principal_id) 
,  suser_sname(sid) 
from sys.server_principals 
where name = suser_name() 

केवल पहला और अंतिम कॉलम गैर-शून्य मान वापस करेगा।

+0

मैंने आपके द्वारा प्रदान किए गए बयान को निष्पादित किया, और केवल तीसरा कॉलम शून्य था, ऐसा लगता है कि 'SUSER_NAME' दोनों 'प्रिंसिपल_आईडी' और 'सिड' स्वीकार करता है। जिस तरह से मैं SQL सर्वर 2012 का उपयोग कर रहा हूं, अगर यह मायने रखता है। –

+1

@ मोहम्मद ए। फ़ैडिल: अजीब, मैं 2012 का भी उपयोग कर रहा हूं, और कॉलम दो और तीन 'शून्य' हैं। वहां एक कोने का मामला हो सकता है जहां 'कास्ट (int के रूप में एसआईडी' '' prime_id' के बराबर होता है, लेकिन यह – Andomar

+0

@ मोहम्मद ए की अत्यधिक संभावना नहीं है।Fadil: जब आप उस परिणाम देखा जब आप sa के रूप में लॉग इन थे? मैं अंतर्निहित सर्वर प्रिंसिपल के लिए principal_id = sid देख रहा हूं। –

0

SUSER_NAME() sys.server_principals में मौजूद एक सिड से जुड़े नाम को वापस कर देगा। Syidserver_principals में sid मौजूद होना चाहिए।

SUSER_SNAME() ऐसा कर सकते हैं, लेकिन यह भी एक लॉगिन के sid लौटा सकते हैं या लॉगिन एक सक्रिय निर्देशिका समूह

का एक सदस्य है तुम हो तो अगर [Contoso \ MyGroup] सक्रिय निर्देशिका में और उस समूह है एक उपयोगकर्ता [CONTOSO \ MyUser]

और आप उस समूह को SQL सर्वर में जोड़ते हैं: विन्डोज़ से लॉग इन [CONTOSO \ MyGroup] बनाएं;

चयन SUSER_ID ('Contoso \ MyUser'), SUSER_SID ('Contoso \ MyUser')

आप शून्य, Contoso \ MyUser दे देंगे क्योंकि Contoso \ MyUser sys.server_principals में नहीं है, लेकिन एक में है/डी

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