2010-08-25 56 views
28

這似乎是一個相當普遍的問題,但我見過的所有答案都沒有特別令人滿意。我想獲得本地計算機上安裝的MS SQL Server實例的名稱列表,無論它們是否已啓動。爲了討論的目的,我只需找到SQL 2005和更新的實例即可;我可以使用「傳統」方法處理2000和更早版本(即查看註冊表)。我所要求的是,它不依賴於SQL Server Browser服務(它現在默認爲禁用),即使應用程序是32位,也會返回64位實例。如何獲取本地計算機上所有MS SQL Server實例的列表?

建議,我已經看到了:

  • 挖通了註冊表:據說Not recommended由於是無證的註冊表項; MS可能會在未來改變它們。更重要的是,據我所知,MSSQL的64位實例位於64位HKLM \ SOFTWARE \ Microsoft \ Microsoft SQL Server InstalledInstances中,而32位實例位於32位實例中, bit應用程序不會看到任何64位實例。

  • 使用上一篇博文中提到的SQL WMI Provider for Configuration Management。這似乎是最接近的,但儘管作者勸告避免使用註冊表,因爲它可能會改變,但事實證明WMI名稱空間在SQL 2005和2008之間發生了變化:2005年,它是root \ Microsoft \ SqlServer \ ComputerManagement,但在2008年它是root \ Microsoft \ SqlServer \ ComputerManagement10。未來會再度改變嗎?也就是說,如果我不得不更新我的應用程序以用於未來版本的SQL,那麼這可能不是一個大問題。

    我用WMI方法的問題是SqlService類返回一個服務名稱列表,而我想要實例名稱。例如,而不是MSSQL $ INSTANCE,我只想要INSTANCE。剝離「MSSQL $」是微不足道的,正如處理默認實例的特例一樣,但是可靠嗎? AFAIK,技術上沒有理由爲什麼服務無法重命名,同時保持實例名稱相同。這就是說,除非有人有更好的方法,我想我會去(取得服務名稱並剝離MSSQL $)。 ServerSettings類返回實例名稱,但它沒有看到我的計算機上安裝的SQL 2008 R2 Express的64位實例。

  • 使用SmoApplication.EnumAvailableSqlServers(true):這似乎取決於SQL Server Browser服務。如果瀏覽器服務啓動,它會很好,但如果不是,我只會得到一行,其中計算機名稱作爲服務器名稱和空白實例名稱。

  • 使用System.Data.Sql.SqlDataSourceEnumerator.GetDataSources():同樣的問題,它依賴於SQL Server瀏覽器。

那麼,還有其他一些方法可能會更好嗎?

+0

請注意,在Windows Server 2012和Windows 8上,如果未更新到Service Pack 2(SQL Server 2008 R2 10.50.4000,Service Pack 2),則使用WMI檢測SQL Server 2008 R2的實例可能會失敗, 。它在模塊svrenumapi100.dll中失敗,由wmiprvse.exe使用 – demp 2013-08-12 12:13:49

回答

11

我能看到使用PowerShell在我的筆記本電腦都2005和2008的SQL Server實例:

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

其他可能性,探索包括通過RegisteredServers命名空間枚舉。

+1

嗯,是可靠的嗎?也就是說,確保MSSQL的DisplayName始終以「SQL Server(」)開頭?我正在考慮本地化版本 - 我已經安裝的唯一一個非英文版本是法語版本,並且在那裏沒關係。與SQL相關的服務DisplayNames _are_本地化(例如,「SQL Server代理(INSTANCE)」是法語中的「代理SQL Server(INSTANCE)」),我不相信MSSQL的DisplayName不是以某種語言開頭的「 SQL Server(「)看起來像尋找一個以」MSSQL $「開頭的服務名稱比這個方法更可靠 – 2010-08-27 03:38:59

+0

這是一個公平的問題,我調整了答案只搜索名爲'MSSQL $ *'在我的計算機上返回正確的結果)雖然我不確定它將如何出現在不同的區域設置 – 8kb 2010-08-27 04:21:40

+2

不適用於名爲'MSSQLSERVER'的默認實例(即不以'MSSQL $'開頭) – 2014-09-22 11:49:31

1

這可能是有幫助的,我已經在SQL Server 2008中嘗試這樣做:

select * from sys.servers 
+1

顯示數據庫的列表se服務器鏈接到您執行該查詢的服務器。某些鏈接服務器可能位於其他計算機上,或者它們可能不是MSSQL(可以鏈接到ODBC數據源或Access數據庫等)。此外,它不會顯示在同一臺機器上的其他MSSQL實例,除非有人明確鏈接它們。問題是如何獲取已安裝的MSSQL實例的列表,因此要求您已經知道一個實例,並且還要有連接到它的憑據,這是行不通的。運行Windows服務並查找SQL Server服務的 – 2013-05-01 19:53:13

2

我知道這是一個老帖子,但我沒來這個帖子今天尋找一種方式來找到安裝實例SQL Server。雖然給出的兩個答案都很有幫助,但我認爲它們只適用於安裝和運行 SQL Server的實例。如果安裝了SQL Server配置管理器,則應該在SQL Server服務節點下列出所有已安裝的實例。在這裏你可能會發現一個已安裝的實例,但沒有運行。您可以右鍵單擊實例並啓動它。我相信還有其他方法可以做到這一點;這只是我今天派上用場的一種方式,我想我會分享它。

+0

是替代方案,前提是您沒有安裝Configuration Manager – Mubarek 2017-11-15 18:32:25

4

從命令提示符(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

SQL瀏覽器服務(如果有效)會講SSRP/MS-SQLR上的UDP端口1434

它是用於爲組件遠程發現實例(並確定其端口)。它有助於在網絡中發現。

但是它默認是禁用的(表面減少的好處)。

相關問題