2010-08-25 6 views
28

Dies scheint eine ziemlich häufige Frage zu sein, aber keine der Antworten, die ich gesehen habe, war besonders zufriedenstellend. Ich möchte eine Liste der Namen der MS SQL Server-Instanzen erhalten, die auf dem lokalen Rechner installiert sind, unabhängig davon, ob sie gestartet wurden oder nicht. Für die Zwecke dieser Diskussion ist es OK, nur Instanzen von SQL 2005 und neuer zu finden. Ich kann 2000 und früher mit "Legacy" -Methoden umgehen (d. H. In der Registrierung suchen). Was ich benötige, ist, dass es nicht vom SQL Server-Browserdienst abhängig ist (es ist heutzutage standardmäßig deaktiviert) und dass 64-Bit-Instanzen zurückgegeben werden, selbst wenn die App 32-Bit ist.Wie bekomme ich eine Liste aller MS SQL Server-Instanzen auf dem lokalen Rechner?

Vorschläge die ich gesehen habe:

  • Dig durch die Registrierung: Angeblich soll Not recommended aufgrund der Registrierungseinträge nicht dokumentiert sind; MS könnte sie in Zukunft ändern. Noch wichtiger ist, soweit ich das beurteilen kann, gehen 64-Bit-Instanzen von MSSQL in die 64-Bit-HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server InstalledInstances und 32-Bit-Instanzen in die 32-Bit-Instanzen, also eine 32-Bit-Instanz. Bit App wird keine 64-Bit-Instanzen sehen.

  • Verwenden Sie die SQL WMI Provider for Configuration Management, die im vorherigen Blogpost erwähnt wurde. Dies scheint der nächste zu sein, aber trotz der Ermahnung des Autors, die Registrierung nicht zu verwenden, da sich die WMI-Namespaces zwischen SQL 2005 und 2008 ändern könnten: 2005 ist es root \ Microsoft \ SqlServer \ ComputerManagement, aber 2008 Es ist root \ Microsoft \ SqlServer \ ComputerManagement10. Wird es sich in Zukunft noch ändern? Das heißt, es ist wahrscheinlich kein großes Problem, wenn ich meine App für eine zukünftige Version von SQL aktualisieren muss.

    Das Problem, das ich mit der WMI-Methode habe, ist, dass die SqlService-Klasse eine Liste der Dienstnamen zurückgibt, während ich die Instanz Namen möchte. ZB anstelle von MSSQL $ INSTANCE möchte ich einfach INSTANCE. Das Entfernen von "MSSQL $" ist trivial, ebenso wie die Behandlung des Spezialfalls der Standardinstanz, aber ist es zuverlässig? AFAIK, gibt es technisch keinen Grund, warum der Dienst nicht umbenannt werden konnte, während der Instanzname gleich bleibt. Abgesehen davon, dass jemand eine bessere Methode hat, denke ich, werde ich damit gehen (holen Sie sich die Service-Namen und entfernen Sie die MSSQL $). Die ServerSettings-Klasse gibt den Instanznamen zurück, aber es wird keine 64-Bit-Instanz von SQL 2008 R2 Express angezeigt, die ich auf meinem Computer installiert habe.

  • Verwenden Sie SmoApplication.EnumAvailableSqlServers(true): Dies scheint auf den SQL Server-Browser-Dienst zu beruhen. Es funktioniert gut, wenn der Browser-Dienst gestartet wird, aber wenn nicht, erhalte ich nur eine Zeile mit dem Computernamen als Servernamen und einem leeren Instanznamen.

  • Verwenden Sie System.Data.Sql.SqlDataSourceEnumerator.GetDataSources(): das gleiche Problem, dass es vom SQL Server-Browser abhängt.

Also, gibt es einige andere Methoden, die besser funktionieren könnten?

+0

Beachten Sie, dass unter Windows Server 2012 und Windows 8 die Verwendung von WMI zum Erkennen von Instanzen von SQL Server 2008 R2 fehlschlagen kann, wenn es nicht auf Service Pack 2 aktualisiert wird (SQL Server 2008 R2 10.50.4000, Service Pack 2) . Es schlägt in Modul svrenumapi100.dll, verwendet von wmiprvse.exe – demp

Antwort

11

Ich bin in der Lage, beide 2005 und 2008 SQL Server-Instanzen auf meinem Laptop zu sehen Powershell mit:

Get-Service | Where-Object {$_.Name -like 'MSSQL$*'} 

Weitere Möglichkeiten durch die RegisteredServers Namespace gehören Aufzählen zu erkunden.

+1

Hmm, ist das zuverlässig? Das heißt, ist es garantiert, dass MSSQL DisplayName immer mit "SQL Server ("?) Beginnt? Ich denke über lokalisierte Versionen nach - die einzige nicht-englische Version, die ich installiert habe, ist Französisch, und es ist OK dort. Jedoch seit einigen anderen Der SQL-bezogene Dienst DisplayNames _are_ lokalisiert (zB "SQL Server Agent (INSTANCE)" ist "Agent SQL Server (INSTANCE)" auf Französisch), ich bin nicht davon überzeugt, dass es keine Sprache gibt, in der MSSQLs DisplayName nicht mit " SQL Server (". Es scheint so, als wäre die Suche nach einem Dienstnamen, der mit" MSSQL $ "beginnt, zuverlässiger als diese Methode. –

+0

Es ist eine faire Frage. Ich habe die Antwort so angepasst, dass nur nach Name wie 'MSSQL $ *' gesucht wird gibt die korrekten Ergebnisse auf meinem Computer zurück, obwohl ich mir nicht sicher bin, wie es in verschiedenen Regionseinstellungen aussehen wird. – 8kb

+2

Funktioniert nicht für die Standardinstanz, die 'MSSQLSERVER' heißt (dh nicht mit' MSSQL $ 'beginnt) –

1

Dies kann hilfreich sein, ich habe diese 2008 Server in Sql versucht:

select * from sys.servers 
+1

Zeigt die Liste der Datenbanken an Server, die mit dem Server verbunden sind, auf dem Sie diese Abfrage ausgeführt haben. Einige der verbundenen Server befinden sich möglicherweise auf anderen Computern oder sind möglicherweise nicht einmal MSSQL (Sie können eine Verknüpfung mit einer ODBC-Datenquelle oder einer Access-Datenbank usw. herstellen). Außerdem werden andere MSSQL-Instanzen, die sich auf demselben Computer befinden, nicht angezeigt, es sei denn, sie wurden explizit von einem Benutzer verknüpft. Die Frage bezieht sich darauf, wie die Liste der installierten MSSQL-Instanzen abgerufen werden kann. Daher ist es nicht erforderlich, dass Sie bereits eine Instanz kennen und auch die Anmeldeinformationen für die Verbindung mit dieser Instanz haben. –

2

Ich weiß, das ist ein älterer Beitrag, aber ich habe zu diesem Beitrag kam heute nach einer Möglichkeit, installierte Instanzen zu finden SQL Server.Obwohl die zwei gegebenen Antworten hilfreich sind, denke ich, dass sie sich nur auf installierte und laufende Instanzen von SQL Server beziehen. Wenn der SQL Server-Konfigurations-Manager installiert ist, sollten alle installierten Instanzen unter dem Knoten SQL Server-Dienste aufgeführt sein. Hier finden Sie möglicherweise eine Instanz, die installiert, aber nicht ausgeführt wird. Sie können mit der rechten Maustaste auf die Instanz klicken und sie starten. Ich bin mir sicher, dass es andere Möglichkeiten gibt, dies zu tun; Es ist nur ein Weg, der mir heute nützlich war, und ich dachte, ich würde es teilen.

+0

Ausführen von Windows-Dienste und Suchen nach SQL Server-Diensten ist eine Alternative, wenn Sie den Configuration Manager nicht installiert haben – Mubarek

4

an einer Eingabeaufforderung (cmd.exe):

sc query|findstr "DISPLAY_NAME"|findstr /C:"SQL Server (" > myfile.txt 

FOR /F " tokens=2 delims=()" %i in (myfile.txt) do @echo %computername%\%i 
0

Der SQL-Browser-Dienst (falls aktiv) spricht SSRP/MS-SQLR auf UDP-Port 1434

Es ist die Komponente, die für verwendet wird, Remote-Erkennung von Instanzen (und auch Bestimmung ihres Ports). Es hilft auch bei der Entdeckung in einem Netzwerk.

Es ist jedoch standardmäßig deaktiviert (gute Sache für Oberflächenreduzierung).

Verwandte Themen