как узнать адрес sql сервера на компьютере
Как узнать имя экземпляра Microsoft SQL Server на T-SQL
Всем привет! Сегодня мы с Вами рассмотрим несколько способов определения имени экземпляра Microsoft SQL Server на языке T-SQL, а также с использованием других программных средств.
Способы определения имени экземпляра Microsoft SQL Server
Существует несколько способов узнать, какое имя экземпляра у SQL Server. Мы рассмотрим способы, которые подразумевают обращение к определенным системным функциям на языке T-SQL, а также способ, с помощью которого мы можем узнать имена всех экземпляров SQL Server, которые установлены на конкретном сервере.
Кроме этого я покажу способ определения имени экземпляра SQL Server без выполнения SQL инструкций, например, для случаев, когда нет возможности подключиться к SQL Server. Данный способ предполагает выполнение определённой инструкции на языке PowerShell.
Таким образом, для того чтобы определить имя экземпляра Microsoft SQL Server, Вы можете использовать тот способ, который будет удобнее в Вашем конкретном случае.
Способ 1 – функция @@SERVERNAME
Первый способ предполагает использование системной функции @@SERVERNAME, которая возвращает имя локального сервера, на котором работает SQL Server.
Функция @@SERVERNAME возвращает следующие данные:
Исходные данные | Данные, которые возвращает функция |
Если используется экземпляр по умолчанию | «Имя_сервера» |
Если используется именованный экземпляр | «Имя_сервера\Имя_экземпляра» |
Если используется экземпляр по умолчанию отказоустойчивого кластера | «Сетевое_имя_экземпляра_отказоустойчивого_ кластера_windows_server» |
Если используется именованный экземпляр отказоустойчивого кластера | «Сетевое_имя_экземпляра_отказоустойчивого_ кластера_windows_server\имя_экземпляра» |
Пример использования функции
В моем случае используется именованный экземпляр Microsoft SQL Server, поэтому функция вернула соответствующие данные, где SQLEXPRESS и есть имя экземпляра SQL Server.
Способ 2 – функция @@SERVICENAME
Второй способ определения имени экземпляра Microsoft SQL Server предполагает использование функции @@SERVICENAME, которая возвращает имя раздела реестра, согласно которому запущен SQL Server.
Если текущий экземпляр является экземпляром по умолчанию, то данная функция возвращает «MSSQLSERVER», однако если же текущий экземпляр является именованным экземпляром, то эта функция возвращает имя этого экземпляра.
Пример использования функции
В данном случае, так как у меня именованный экземпляр, функция @@SERVICENAME вернула имя экземпляра.
Способ 3 – функция SERVERPROPERTY
Следующий способ определения имени экземпляра SQL Server предполагает использование системной функции SERVERPROPERTY, которая возвращает много различных сведений о свойствах экземпляра Microsoft SQL Server.
Данная функция принимает один параметр, и если мы передадим значение «InstanceName», то она нам вернет имя экземпляра.
Однако здесь стоит учитывать, что если используется экземпляр по умолчанию, то функция вернет NULL.
Пример использования функции
У меня именованный экземпляр, поэтому функция вернула имя экземпляра.
Способ 4 – процедура xp_regread
Если Вам необходимо узнать имена всех экземпляров SQL Server, которые установлены на конкретном сервере, то для этого Вы можете использовать системную хранимую процедуру xp_regread, которая умеет считывать параметры реестра Windows, в котором как раз и можно найти всю интересующую нас информацию об экземплярах Microsoft SQL Server.
Процедура принимает три параметра: в первом мы указываем название раздела реестра, во втором — путь к нужной нам ветке реестра, и третий — параметр, значение которого нам нужно считать.
Пример использования процедуры
У меня установлен только один экземпляр, поэтому инструкция вернула одну строку данных.
Как узнать имя экземпляра Microsoft SQL Server на PowerShell
Способ предполагает простое считывание названия службы Microsoft SQL Server, т.е. мы с помощью определенной инструкции на PowerShell ищем название службы по префиксу «MSSQL$» (данный префикс имеет «Имя службы, а не «Отображаемое имя службы»).
Пример инструкции на PowerShell
Кроме этого, узнать имя экземпляра Microsoft SQL Server можно, если зайти в оснастку «Службы» в Windows и посмотреть, какое имя указано в названии службы SQL Server.
Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL, которую написал я, и в которой я подробно, и в то же время простым языком, рассказываю о языке SQL.
На сегодня это все, надеюсь, материал был Вам полезен, пока!
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Как узнать имя сервера Microsoft SQL Server
Для выполнения запросов к локальной базе данных Microsoft SQL Server из программы необходимо знать имя экземпляра сервера. Из статьи вы узнаете, как его получить.
Способ первый. Самый надежный
В Microsoft SQL Server предусмотрен специальный SQL запрос, возвращающий имя экземпляра сервера:
Выполнив данный запрос, например, в SQL Server Management Studio, вы получите имя вашего экземпляра сервера.
В данном случае было возвращено имя установленного экземпляра Microsoft SQL Server равное: SQLEXPRESS.
Способ второй
Другим способом получения имени SQL-сервера является поиск записи службы SQL Server.
Запустите классическое приложение Windows “Службы” на вашем компьютере и найдите в списке служб объект SQL Server.
В скобках будет указано имя экземпляра.
В этом же меню можно остановить, запустить и перезапустить экземпляр установленного Microsoft SQL Server.
Стоит отметить, что второй способ получения имени сервера – менее достоверен. В скобках не всегда указано истинное имя сервера, пригодное для обращения к нему при подключении. Поэтому при наличии возможности лучше всего использовать первый способ получения имени с помощью SQL-запроса.
Есть ли запрос в SQL Server 2005, который я могу использовать для получения IP-адреса или имени сервера?
ОТВЕТЫ
Ответ 1
Код здесь даст вам IP-адрес;
Это будет работать для удаленного запроса клиента на SQL 2008 и новее.
Если вы используете Разрешения для общей памяти, то выполнение выше на самом сервере даст вам
Ответ 2
Вы можете получить имя [hostname]\[instancename]:
Чтобы получить только имя хоста, если у вас есть имя хоста\формат имени экземпляра:
В качестве альтернативы, как @GilM указал:
Вы можете получить фактический IP-адрес, используя это:
Ответ 3
На сервере может быть несколько IP-адресов, которые он прослушивает. Если ваше соединение имеет разрешение сервера просмотра VIEW SERVER STATE, вы можете запустить этот запрос, чтобы получить адрес, который вы подключили к SQL Server:
Это решение не требует, чтобы вы выгружались в ОС через xp_cmdshell, что является методом, который должен быть отключен (или, по крайней мере, строго защищен) на рабочем сервере. Это может потребовать, чтобы вы предоставили статус просмотра VIEW SERVER соответствующему логину, но это гораздо меньший риск для безопасности, чем запуск xp_cmdshell.
Предпочтительная технология, упомянутая GilM для имени сервера:
Ответ 4
Ответ 5
Большинство решений для получения IP-адреса через t-sql попадают в эти два лагеря:
Запустите ipconfig.exe через xp_cmdshell и проанализируйте вывод
Запрос DMV sys.dm_exec_connections
Я не поклонник варианта №1. Включение xp_cmdshell имеет недостатки безопасности, и в этом случае много разбора. Это громоздко. Вариант № 2 элегантен. И это чистое решение t-sql, которое я почти всегда предпочитаю. Вот два примера запросов для опции № 2:
Иногда ни один из вышеперечисленных запросов не работает. Запрос №1 возвращает NULL, если вы подключены к общей памяти (зарегистрировались и запускали SSMS на хосте SQL). Запрос №2 может ничего не возвращать, если нет соединений с использованием протокола без общей памяти. Вероятно, этот сценарий связан с новым экземпляром SQL. Решение? Настройте соединение через TCP/IP. Для этого создайте новое соединение в SSMS и используйте префикс «tcp:» с именем сервера. Затем повторно запустите любой запрос, и вы получите IP-адрес.
Ответ 6
Ответ 7
Более простой способ получить имя машины без имени \InstanceName:
Ответ 8
вы можете использовать запрос командной строки и выполнить в mssql:
Ответ 9
— Попробуйте этот script, он работает для моих нужд. Переформатировать его.
Ответ 10
Я знаю, что это старый пост, но, возможно, это решение может быть полезно, когда вы хотите получить IP-адрес и TCP-порт из соединения с общей памятью (например, из script в SSMS локально на сервере). Ключ состоит в том, чтобы открыть дополнительное соединение с вашим SQL Server с помощью OPENROWSET, в котором вы указываете «tcp:» в своей строке подключения. Остальная часть кода просто создает динамический SQL, чтобы обойти ограничение OPENROWSET, неспособное принимать переменные в качестве параметров.
Вход в систему SQL Server
Войти в систему на экземпляре Microsoft SQL Server можно с использованием любого графического средства администрирования или из командной строки.
При входе на экземпляр SQL Server с помощью графического средства администрирования, такого как среда SQL Server Management Studio, пользователю предлагается ввести имя сервера, имя входа SQL Server и, при необходимости, пароль. Если вход на SQL Server осуществляется с проверкой подлинности Windows, то каждый раз при обращении к экземпляру SQL Serverвводить имя входа SQL Server не нужно. Вместо этого в SQL Server используется учетная запись Microsoft Windows для автоматического входа в систему. Если SQL Server работает в смешанном режиме (проверка подлинности SQL Server и Windows) и пользователь входит в систему с проверкой подлинности SQL Server, то необходимо указать имя входа SQL Server и пароль. По возможности используйте аутентификацию Windows.
Если при установке SQL Serverбыли выбраны параметры сортировки с учетом регистра, то для имени входа SQL Server регистр также учитывается.
Формат для указания имени сервера SQL Server
Примеры:
Тип экземпляра | Элемент для имени сервера |
---|---|
Соединение с экземпляром по умолчанию с помощью протокола по умолчанию. | APPHOST |
Соединение с именованным экземпляром с помощью протокола по умолчанию. | APPHOST\SQLEXPRESS |
Соединение с экземпляром по умолчанию на том же компьютере при помощи точки для указания, что экземпляр выполняется на локальном компьютере. | . |
Соединение с именованным экземпляром на том же компьютере с помощью точки для указания, что экземпляр выполняется на локальном компьютере. | .\SQLEXPRESS |
Соединение с экземпляром по умолчанию на том же компьютере при помощи localhost для указания, что экземпляр выполняется на локальном компьютере. | localhost |
Соединение с именованным экземпляром на том же компьютере с помощью localhost, указывающее, что экземпляр выполняется на локальном компьютере. | localhost\SQLEXPRESS |
Соединение с экземпляром по умолчанию на том же компьютере с помощью (local), указывающее, что экземпляр выполняется на локальном компьютере. | (local) |
Соединение с именованным экземпляром на том же компьютере с помощью (local), указывающее, что экземпляр выполняется на локальном компьютере. | (local)\SQLEXPRESS |
Соединение с экземпляром по умолчанию на том же компьютере с принудительным подключением к общей памяти. | lpc:APPHOST |
Соединение с именованным экземпляром на том же компьютере с принудительным подключением к общей памяти. | lpc:APPHOST\SQLEXPRESS |
Соединение с экземпляром по умолчанию, с прослушиванием TCP-адреса 192.168.17.28 с помощью IP-адреса. | 192.168.17.28 |
Соединение с именованным экземпляром, с прослушиванием TCP-адреса 192.168.17.28 с помощью IP-адреса. | 192.168.17.28\SQLEXPRESS |
Соединение с экземпляром по умолчанию, который не прослушивает TCP-порт по умолчанию, с указанием используемого порта, в данном случае 2828. (Указывать порт необязательно, если компонент Компонент Database Engine ожидает передачи данных на порте по умолчанию, т. е. 1433.) | APPHOST, 2828 |
Соединение с именованным экземпляром на назначенный TCP порт, в данном случае 2828. (Указывать порт часто необходимо, если служба браузера SQL Server не запущена на компьютере узла.) | APPHOST, 2828 |
Соединение с экземпляром по умолчанию, который не прослушивает TCP-порт по умолчанию, с указанием IP-адреса и TCP-порта, в данном случае 2828. | 192.168.17.28,2828 |
Соединение с именованным экземпляром, с указанием IP-адреса и TCP-порта, в данном случае 2828. | 192.168.17.28\SQLEXPRESS,2828 |
Соединение с экземпляром по умолчанию по имени при форсировании соединения TCP. | tcp:APPHOST |
Соединение с именованным экземпляром по имени, с принудительным TCP-соединением. | tcp:APPHOST\SQLEXPRESS |
Соединение с экземпляром по умолчанию, с указанием имени именованного канала. | \\APPHOST\pipe\SQL\query |
Соединение с именованным экземпляром, с указанием имени именованного канала. | \\APPHOST\pipe\MSSQL$SQLEXPRESS\SQL\query |
Соединение с экземпляром по умолчанию по имени, с принудительным подключением к именованным каналам. | np:APPHOST |
Соединение с именованным экземпляром по имени, с принудительным подключением к именованным каналам. | np:APPHOST\SQLEXPRESS |
Проверка протокола соединения
При соединении с компонентом Компонент Database Engineследующий запрос возвратит протокол, используемый для текущего соединения, вместе с методом проверки подлинности (NTLM или Kerberos) и укажет состояние шифрования соединения.
Связанные задачи
Следующие ресурсы могут помочь устранить проблему с соединением.
@@SERVERNAME (Transact-SQL)
Возвращает имя локального сервера, на котором работает SQL Server.
Синтаксические обозначения в Transact-SQL
Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Типы возвращаемых данных
nvarchar
Remarks
Программа установки SQL Server присваивает серверу имя компьютера. Чтобы изменить имя сервера, выполните процедуру sp_addserver, а затем перезапустите SQL Server.
При наличии нескольких установленных экземпляров SQL Server функция @@SERVERNAME возвращает указанные ниже сведения об имени локального сервера, если это имя не было изменено после установки.
Экземпляр | Информация о сервере |
---|---|
Экземпляр по умолчанию | ‘имя_сервера‘ |
Именованный экземпляр | ‘имя_сервера\имя_экземпляра‘ |
Экземпляр отказоустойчивого кластера — экземпляр по умолчанию | «сетевое_имя_экземпляра_отказоустойчивого_кластера_windows_server« |
Экземпляр отказоустойчивого кластера — именованный экземпляр | «сетевое_имя_экземпляра_отказоустойчивого_кластера_windows_server\имя_экземпляра« |
Хотя функция @@SERVERNAME и свойство SERVERNAME функции SERVERPROPERTY могут возвращать строки в похожих форматах, эта информация может различаться. Свойство SERVERNAME автоматически сообщает об изменениях сетевого имени компьютера.
Функция @@SERVERNAME, напротив, не сообщает о таких изменениях. Функция @@SERVERNAME информирует об изменении имени локального сервера, которое было выполнено с помощью хранимых процедур sp_addserver или sp_dropserver.
Примеры
Ниже приводится образец результирующего набора.