यह एक काफी आम प्रश्न प्रतीत होता है, लेकिन मैंने जो जवाब देखा है, वह विशेष रूप से संतोषजनक नहीं रहा है। मैं स्थानीय मशीन पर स्थापित एमएस एसक्यूएल सर्वर इंस्टेंस के नामों की एक सूची प्राप्त करना चाहता हूं, भले ही वे शुरू हो या नहीं। इस चर्चा के प्रयोजनों के लिए, मैं केवल SQL 2005 और नए के उदाहरण ढूंढने के साथ ठीक हूं; मैं 2000 और पहले "विरासत" विधियों का उपयोग कर संभाल सकता हूं (यानी, रजिस्ट्री में देखें)। मुझे जो चाहिए वह यह है कि यह SQL सर्वर ब्राउज़र सेवा (यह आजकल डिफ़ॉल्ट रूप से अक्षम है) पर निर्भर नहीं है, और 64-बिट उदाहरण तब भी लौटाए जाते हैं जब ऐप 32-बिट होता है।स्थानीय मशीन पर सभी एमएस एसक्यूएल सर्वर उदाहरणों की सूची कैसे प्राप्त करें?
सुझाव मैंने देखा है:
रजिस्ट्री के माध्यम से खुदाई: माना जाता है गैर-दस्तावेजी जा रहा है रजिस्ट्री प्रविष्टियाँ की वजह से Not recommended; एमएस भविष्य में उन्हें बदल सकता है। सबसे महत्वपूर्ण बात यह है कि, जहां तक मैं कह सकता हूं, एमएसएसक्यूएल के 64-बिट उदाहरण 64-बिट एचकेएलएम \ सॉफ़्टवेयर \ माइक्रोसॉफ्ट \ माइक्रोसॉफ्ट एसक्यूएल सर्वर स्थापित किए गए इंस्टेंस में जाते हैं, और 32-बिट उदाहरण 32-बिट में जाते हैं, इसलिए 32- बिट ऐप को 64-बिट उदाहरण नहीं दिखाई देंगे।
पिछले ब्लॉग पोस्ट में उल्लिखित SQL WMI Provider for Configuration Management का उपयोग करें। यह सबसे नज़दीक प्रतीत होता है, लेकिन लेखक की सलाह के बावजूद रजिस्ट्री का उपयोग करने से बचने के लिए, क्योंकि यह बदल सकता है, यह SQL 2005 और 2008 के बीच डब्लूएमआई नेमस्पेस बदल गया: 2005 में, यह मूल \ Microsoft \ SqlServer \ ComputerManagement है, लेकिन 2008 में यह मूल \ Microsoft \ SqlServer \ ComputerManagement10 है। क्या यह भविष्य में फिर से बदल जाएगा? उस ने कहा, अगर मुझे एसक्यूएल के भविष्य के संस्करण के लिए अपना ऐप अपडेट करना है तो शायद यह एक बड़ा मुद्दा नहीं है।
डब्लूएमआई विधि के साथ मेरी समस्या यह है कि एसक्लस सर्विस क्लास सेवा नामों की एक सूची देता है, जबकि मुझे इंस्टेंस नाम चाहिए। उदाहरण के लिए, एमएसएसक्यूएल $ इंस्टेंस के बजाय, मैं बस इंस्टेंस करना चाहता हूं। "MSSQL $" को अलग करना डिफ़ॉल्ट है, क्योंकि डिफ़ॉल्ट उदाहरण के विशेष मामले को संभालना है, लेकिन क्या यह विश्वसनीय है? AFAIK, तकनीकी रूप से कोई कारण नहीं है कि सेवा का नाम बदला नहीं जा सका, जबकि इंस्टेंस नाम को वही रखा गया। उस ने कहा, जब तक कि किसी के पास कोई बेहतर तरीका न हो, मुझे लगता है कि मैं इसके साथ जाऊंगा (सेवा के नाम प्राप्त करें और एमएसएसक्यूएल $ को बंद कर दें)। ServerSettings क्लास इंस्टेंस नाम देता है, लेकिन यह मेरी मशीन पर स्थापित SQL 2008 R2 एक्सप्रेस का 64-बिट उदाहरण नहीं देखता है।
SmoApplication.EnumAvailableSqlServers(true)
का उपयोग करें: यह SQL सर्वर ब्राउज़र सेवा पर निर्भर करता है। ब्राउज़र सेवा शुरू होने पर यह बहुत अच्छा काम करता है, लेकिन यदि ऐसा नहीं है, तो मुझे कंप्यूटर नाम के साथ सर्वर नाम और रिक्त उदाहरण नाम के रूप में एक पंक्ति मिलती है।System.Data.Sql.SqlDataSourceEnumerator.GetDataSources()
का उपयोग करें: एक ही समस्या यह है कि यह SQL सर्वर ब्राउज़र पर निर्भर करता है।
तो, क्या कुछ अन्य विधियां बेहतर काम कर सकती हैं?
ध्यान रखें कि Windows Server 2012 और Windows 8 पर, SQL Server 2008 R2 के उदाहरणों का पता लगाने के लिए WMI का उपयोग विफल हो सकता है यदि यह सर्विस पैक 2 (SQL Server 2008 R2 10.50.4000, सर्विस पैक 2) में अपडेट नहीं किया गया है । यह मॉड्यूल svrenumapi100.dll में विफल रहता है, wmiprvse.exe – demp