टी-एसक्यूएल से वर्तमान इंस्टेंस नाम कैसे प्राप्त करें


90

T-SQL स्क्रिप्ट का उपयोग करके मैं SQL सर्वर सर्वर और वर्तमान कनेक्शन का नाम कैसे प्राप्त कर सकता हूं?


स्वीकृत उत्तर सही है। SELECT @@SERVERNAMEका उपयोग कर कनेक्ट करने के लिए आवश्यक परिणाम पैदा करता है sqlcmd -S। यदि यह डिफ़ॉल्ट MSSQLSERVER उदाहरण है, तो इसे -S पैरामीटर में निर्दिष्ट नहीं किया जाना चाहिए। यह 2017 14.0.2002.14 डेवलपर संस्करण, 64-बिट पर है।
जलाई

जवाबों:


165

बस उत्तर मिला, इस SO प्रश्न में (शाब्दिक रूप से, प्रश्न के अंदर, कोई उत्तर नहीं):

SELECT @@servername

जहाँ तक यह डिफ़ॉल्ट उदाहरण नहीं है तब तक servername \ आवृत्ति देता है

SELECT @@servicename

उदाहरण नाम लौटाता है, भले ही यह डिफ़ॉल्ट (MSSQLSERVER) हो


1
@blasto, यह प्रतीत होता है कि सर्वर पर डिफ़ॉल्ट डिफ़ॉल्ट होने पर व्यवहार होता है। एक नामांकित उदाहरण के साथ प्रयास करें। : इस चेक technet.microsoft.com/en-us/library/ms187944.aspx
गिलर्मो Gutiérrez

10
गलत, @@ सर्वरनाम का उपयोग आपको गलत उत्तर दे सकता है। सही कंवर्ट (sysname, SERVERPROPERTY ('servername')) सही उत्तर है। @@ ServerName SQL क्लस्टर नाम की रिपोर्ट करता है, जबकि serverproperty ('servername') Windows क्लस्टर नाम की रिपोर्ट करता है। आपको अपने db से जुड़ने के लिए Windows क्लस्टर नाम की आवश्यकता है (Windows क्लस्टर का नाम SQL क्लस्टर नाम से भिन्न हो सकता है; यह आमतौर पर तब होता है जब आप एक अलग मशीन पर एक नया sql- सर्वर संस्करण स्थापित करते हैं (@@ servername = Environment.MachineName) और पुराना नाम रखना चाहते हैं ताकि आपको सभी कॉन्फ़िगर्स को बदलना न पड़े)।
स्टीफन स्टीगर

1
@StefanSteiger लिंक किए गए SO प्रश्न का स्वीकृत उत्तर आपके द्वारा प्रस्तुत समाधान को इंगित करता है, लेकिन टिप्पणियाँ इंगित करती हैं कि यह कुछ लोगों के लिए काम नहीं करता है।
ट्रिस्टेड

17

इस बारे में कैसा है:

EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
                   @key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
                   @value_name='MSSQLSERVER'

इसे इंस्टेंस नाम भी मिलेगा। nullडिफ़ॉल्ट उदाहरण का अर्थ है:

SELECT SERVERPROPERTY ('InstanceName')

http://technet.microsoft.com/en-us/library/ms174396.aspx


10
Select SERVERPROPERTY ('InstanceName') मुझे NULL देता है।
स्टीम

4
इसके बजाय SELECT CONVERT (sysname, SERVERPROPERTY ('servername')) का उपयोग करें;
स्टीफन स्टीगर

1
@Steam: संभवत: क्योंकि यह डिफ़ॉल्ट-इंस्टेंस है।
स्टीफन स्टीगर

10

SELECT @@servername के रूप में आप डेटा दे देंगे server/instanceName

केवल पाने के लिए instanceNameआपको select @@ServiceNameक्वेरी चलानी चाहिए ।


सबसे पहले, आप गलत तरीके से स्लैश है। सही रूप "सर्वर \" उदाहरण है। दूसरा, यह हमेशा सच नहीं होता है कि @@ Servername आपको सर्वर और इंस्टेंस दोनों देगा क्योंकि जब एक ही इंस्टेंस होगा तो यह सिर्फ "सर्वर" पर लौटेगा।
रोबिनो

8

मुझे मिला:

EXECUTE xp_regread
        @rootkey = 'HKEY_LOCAL_MACHINE',
        @key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
        @value_name = 'InstalledInstances'

यह आपको आपके सर्वर में स्थापित सभी उदाहरणों की सूची देगा।


फ़ंक्शन की ServerNameसंपत्ति SERVERPROPERTYऔर @@SERVERNAMEसमान जानकारी लौटाते हैं। ServerNameसंपत्ति Windows सर्वर और उदाहरण के नाम है कि एक साथ अद्वितीय सर्वर उदाहरण बना देता है। @@SERVERNAMEवर्तमान में कॉन्फ़िगर किया गया स्थानीय सर्वर नाम प्रदान करता है।

और वर्तमान सर्वर के लिए Microsoft उदाहरण है:

SELECT CONVERT(sysname, SERVERPROPERTY('servername'));

जब Windows सर्वर पर SQL सर्वर के कई उदाहरण स्थापित होते हैं, तो यह परिदृश्य उपयोगी होता है, और क्लाइंट को वर्तमान कनेक्शन द्वारा उपयोग किए गए समान उदाहरण के लिए कोई अन्य कनेक्शन खोलना होगा।


सेनेट कंवर्ट (sysname, SERVERPROPERTY ('servername')); सही उत्तर है
स्टीफन स्टीगर

8

सिर्फ उदाहरण के नाम पर क्यों रुकें? आप निम्न के साथ अपने SQL सर्वर वातावरण को सूचीबद्ध कर सकते हैं:

SELECT  
    SERVERPROPERTY('ServerName') AS ServerName,  
    SERVERPROPERTY('MachineName') AS MachineName,
    CASE 
        WHEN  SERVERPROPERTY('InstanceName') IS NULL THEN ''
        ELSE SERVERPROPERTY('InstanceName')
    END AS InstanceName,
    '' as Port, --need to update to strip from Servername. Note: Assumes Registered Server is named with Port
    SUBSTRING ( (SELECT @@VERSION),1, CHARINDEX('-',(SELECT @@VERSION))-1 ) as ProductName,
    SERVERPROPERTY('ProductVersion') AS ProductVersion,  
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ProductMajorVersion') AS ProductMajorVersion,
    SERVERPROPERTY('ProductMinorVersion') AS ProductMinorVersion,
    SERVERPROPERTY('ProductBuild') AS ProductBuild,
    SERVERPROPERTY('Edition') AS Edition,
    CASE SERVERPROPERTY('EngineEdition')
        WHEN 1 THEN 'PERSONAL'
        WHEN 2 THEN 'STANDARD'
        WHEN 3 THEN 'ENTERPRISE'
        WHEN 4 THEN 'EXPRESS'
        WHEN 5 THEN 'SQL DATABASE'
        WHEN 6 THEN 'SQL DATAWAREHOUSE'
    END AS EngineEdition,  
    CASE SERVERPROPERTY('IsHadrEnabled')
        WHEN 0 THEN 'The Always On Availability Groups feature is disabled'
        WHEN 1 THEN 'The Always On Availability Groups feature is enabled'
        ELSE 'Not applicable'
    END AS HadrEnabled,
    CASE SERVERPROPERTY('HadrManagerStatus')
        WHEN 0 THEN 'Not started, pending communication'
        WHEN 1 THEN 'Started and running'
        WHEN 2 THEN 'Not started and failed'
        ELSE 'Not applicable'
    END AS HadrManagerStatus,
    CASE SERVERPROPERTY('IsSingleUser') WHEN 0 THEN 'No' ELSE 'Yes' END AS InSingleUserMode,
    CASE SERVERPROPERTY('IsClustered')
        WHEN 1 THEN 'Clustered'
        WHEN 0 THEN 'Not Clustered'
        ELSE 'Not applicable'
    END AS IsClustered,
    '' as ServerEnvironment,
    '' as ServerStatus,
    '' as Comments

1
गुड स्टफ नैट, मेरे पास एक समान अधिक संवर्धित इन्वेंट्री स्क्रिप्ट है। ईमेल द्वारा कॉपी के लिए मुझसे संपर्क करें ... स्क्रिप्ट इस थ्रेड के लिए फोकस से बाहर होगी।
हांक फ्रीमैन

2

सर्वर और उदाहरण की सूची प्राप्त करने के लिए जो आप से जुड़े हैं:

select * from Sys.Servers

सर्वर से जुड़े डेटाबेस की सूची प्राप्त करने के लिए:

SELECT * from sys.databases;

1

सिर्फ रजिस्ट्री प्रश्नों के लिए कुछ स्पष्टीकरण जोड़ने के लिए। वे केवल वर्तमान उदाहरण के लिए मिलान बिटनेस (32 या 64) के उदाहरणों को सूचीबद्ध करते हैं।

64-बिट OS पर 32-बिट SQL इंस्टेंस के लिए वास्तविक रजिस्ट्री कुंजी है:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server

आप 64-बिट इंस्टेंस पर क्वेरी कर सकते हैं ताकि सभी 32-बिट इंस्टेंस भी मिल सकें। 32-बिट का उदाहरण Wow6432Node के लिए प्रतिबंधित लगता है इसलिए 64-बिट रजिस्ट्री ट्री को नहीं पढ़ सकता है।


0

इंस्टेंस नाम खोजने के लिए एक और तरीका- डेटाबेस के नाम पर राइट क्लॉक और प्रॉपर्टीज का चयन करें, इस भाग में आप लेफ्ट डाउन कोने में कनैक्शन प्रॉपर्टीज देख सकते हैं, उस पर क्लिक करें फिर आप इंस्टेंस नाम देख सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.