Подтвердить что ты не робот

Как получить список всех экземпляров MS SQL Server на локальном компьютере?

Это, кажется, довольно распространенный вопрос, но ни один из ответов, которые я видел, был особенно удовлетворительным. Я хочу получить список имен экземпляров MS SQL Server, установленных на локальном компьютере, независимо от того, запущены они или нет. Для целей этого обсуждения я в порядке, просто нахожу экземпляры SQL 2005 и новее; Я могу обрабатывать 2000 и более ранние, используя "устаревшие" методы (т.е. Просматривать в реестре). Я требую, чтобы он не зависел от службы браузера SQL Server (по умолчанию он отключен по умолчанию в настоящее время), и что 64-разрядные экземпляры возвращаются, даже когда приложение 32-разрядное.

Предложения, которые я видел:

  • Перейдите через реестр: предположительно Не рекомендуется из-за того, что записи в реестре недокументированы; MS может изменить их в будущем. Что еще более важно, насколько я могу судить, 64-разрядные экземпляры MSSQL входят в 64-разрядный HKLM\SOFTWARE\Microsoft\Microsoft SQL Server InstalledInstances, а 32-разрядные экземпляры идут в 32-битном, поэтому 32- битное приложение не увидит никаких 64-битных экземпляров.

  • Используйте поставщик SQL WMI для управления конфигурацией, упомянутый в предыдущем сообщении в блоге. Это, кажется, самое близкое, но, несмотря на авторское предупреждение, чтобы избежать использования реестра, поскольку он может измениться, оказалось, что пространство имен WMI изменилось между SQL 2005 и 2008: в 2005 году он был root\Microsoft\SqlServer\ComputerManagement, но в 2008 году это root\Microsoft\SqlServer\ComputerManagement10. Будет ли оно снова изменяться в будущем? Тем не менее, это, вероятно, не большая проблема, если мне нужно обновить мое приложение для будущей версии SQL.

    Проблема с методом WMI заключается в том, что класс SqlService возвращает список имен служб, тогда как мне нужны имена экземпляров. Например, вместо MSSQL $INSTANCE я просто хочу INSTANCE. Отключение "MSSQL $" тривиально, так как обрабатывает специальный случай экземпляра по умолчанию, но является ли он надежным? AFAIK, технически нет причин, по которым услугу нельзя было переименовать, сохраняя имя экземпляра одинаковым. Тем не менее, если у кого-то нет лучшего метода, я думаю, что я пойду с этим (получить имена служб и отключить MSSQL $). Класс ServerSettings возвращает имя экземпляра, но не видит 64-разрядный экземпляр SQL 2008 R2 Express, который я установил на своей машине.

  • Используйте SmoApplication.EnumAvailableSqlServers(true): это, похоже, зависит от службы браузера SQL Server. Он отлично работает, если служба Browser запущена, но если это не так, я просто получаю одну строку с именем компьютера как имя сервера и пустое имя экземпляра.

  • Используйте System.Data.Sql.SqlDataSourceEnumerator.GetDataSources(): та же проблема, что она зависит от браузера SQL Server.

Итак, есть ли другие методы, которые могут работать лучше?

4b9b3361

Ответ 1

Я могу видеть экземпляры SQL Server 2005 и 2008 на моем ноутбуке с помощью Powershell:

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

Другие возможности для изучения включают перечисление через пространство имен RegisteredServers.

Ответ 2

В командной строке (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

Ответ 3

Я знаю, что это более старая статья, но сегодня я пришел к этому сообщению, ища способ найти установленные экземпляры SQL Server. Хотя эти два ответа полезны, я думаю, что они относятся только к установленным и работающим экземплярам SQL Server. Если установлен диспетчер конфигурации SQL Server, все установленные экземпляры должны быть перечислены в службах SQL Server node. Здесь вы можете найти экземпляр, который установлен, но не работает. Вы можете щелкнуть правой кнопкой мыши экземпляр и запустить его. Я уверен, что есть другие способы сделать это; это просто способ, который мне очень полезен сегодня, и я думал, что поделюсь им.

Ответ 4

Это может быть полезно, я пробовал это на Sql Server 2008:

select * from sys.servers

Ответ 5

Служба SQL Browser (если активна) говорит SSRP/MS-SQLR в UDP-порту 1434.

Это компонент, который используется для удаленного обнаружения экземпляров (а также определения их порта). Это также помогает обнаружить в сети.

Однако он отключен по умолчанию (хорошая вещь для уменьшения поверхности).