Как получить имя сервера и экземпляра в T-SQL: сценарии

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Вы можете получить имя текущего экземпляра SQL Server, используя функцию SERVERPROPERTY с параметром 'InstanceName':

SQL
Скопировать код
SELECT SERVERPROPERTY('InstanceName') AS InstanceName;

Этот запрос возвращает имя экземпляра или NULL, если у вас установлен экземпляр по умолчанию.

Чтобы узнать полное имя сервера или экземпляра, примените переменную @@SERVERNAME:

SQL
Скопировать код
SELECT @@SERVERNAME AS FullInstanceName;

Если вам необходимо узнать имя службы сервера, воспользуйтесь @@SERVICENAME:

SQL
Скопировать код
SELECT @@SERVICENAME AS ServiceName;

Это может быть особенно полезным при настройке группы постоянной доступности Always On.

Кинга Идем в IT: пошаговый план для смены профессии

Практическое применение в различных конфигурациях

Экземпляры по умолчанию и именованные экземпляры

Часто различить экземпляры SQL Server по умолчанию от именованных может быть не так просто, как кажется:

  • Экземпляр по умолчанию: не имеет конкретного имени и работает на стандартном порту 1433.
  • Именованный экземпляр: обладает своим уникальным именем.

Данный запрос позволяет определить, является ли перед вами именованный экземпляр или экземпляр по умолчанию:

SQL
Скопировать код
SELECT SERVERPROPERTY('InstanceName') AS InstanceName;

Работа с кластерами и группами высокой доступности

В условиях работы с кластером или в среде высокой доступности значение @@SERVERNAME может не всегда соответствовать активному узлу. В контексте группы Always On Availability Group может быть полезно использовать @@SERVICENAME:

SQL
Скопировать код
SELECT 
  CASE 
    WHEN SERVERPROPERTY('IsClustered') = 1 THEN 'Кластеризованный экземпляр'
    WHEN SERVERPROPERTY('IsHadrEnabled') = 1 THEN 'Группа Always On Availability Group'
    ELSE SERVERPROPERTY('InstanceName')
  END AS InstanceType;

Аспекты работы с различными версиями и необходимость доступа

Важно учитывать следующее прежде чем приступать к работе с этими запросами:

  1. Необходимо иметь соответствующие права доступа. Будте уверены, что ваши действия полностью законны.
  2. SQL Server постоянно обновляется, поэтому вам следует актуализировать свои скрипты с учетом новых версий.

Возможно, в будущем SQL Server будет предоставлять информацию об используемом порте:

SQL
Скопировать код
SELECT 
  SERVERPROPERTY('InstanceName') AS InstanceName, 
  SERVERPROPERTY('Port') AS InstancePort;

Визуализация

Представьте SQL Server как большой склад, наполненный коробками. Когда вы выполняете запрос:

SQL
Скопировать код
SELECT @@SERVERNAME AS InstanceName;

Вы получаете ответ, аналогичный тому, как если бы спросили своего коллегу на складе, куда поставить ту или иную коробку. Но здесь мы говорим о данных, а не о физических объектах.

Детальный обзор серверных деталей

Информация из реестра Windows

Имя экземпляра SQL Server хранится в реестре Windows:

SQL
Скопировать код
EXEC xp_regread 
  'HKEY_LOCAL_MACHINE', 
  'SOFTWARE\Microsoft\MSSQLServer\Setup', 
  'SQLPath';

Для выполнения этого запроса необходимы права системного администратора. Не забывайте, что большая власть предполагает большую ответственность.

Извлечение деталей экземпляра сервера

Чтобы получить более подробную информацию о конкретном экземпляре SQL Server, выполните следующую инструкцию:

SQL
Скопировать код
SELECT 
  @@SERVERNAME AS ServerName,
  SERVERPROPERTY('ProductVersion') AS ProductVersion,
  SERVERPROPERTY('Edition') AS Edition,
  SERVERPROPERTY('MachineName') AS MachineName,
  SERVERPROPERTY('IsClustered') AS IsClustered,
  SERVERPROPERTY('IsHadrEnabled') AS IsHadrEnabled,
  SERVERPROPERTY('ServerName') AS OriginalServerName;

Использование командной строки (sqlcmd)

Почему ограничиваться SQL Server Management Studio, если вы можете взаимодействовать с SQL Server напрямую из командной строки?

Bash
Скопировать код
sqlcmd -S servername\instancename

Параметр -S задает имя сервера или экземпляра, к которому осуществляется подключение.

Полезные материалы

  1. SERVERPROPERTY (Transact-SQL) – SQL Server | Microsoft Docs — официальная документация по функции SERVERPROPERTY в T-SQL.
  2. Как узнать имя текущего экземпляра SQL Server – Stack Overflow — обсуждение использования @@SERVICENAME на Stack Overflow.
  3. SET vs SELECT при присваивании переменных в SQL Server — анализ различий между SET и SELECT при работе с переменными в T-SQL и использовании функций вроде SERVERPROPERTY.
  4. Утилита sqlcmd – SQL Server | Microsoft Docs — документация по утилите sqlcmd для взаимодействия с SQL Server из командной строки.
  5. Конфигурации экземпляров SQL Server — особенности настройки экземпляров SQL Server.
  6. Microsoft Q&A | Microsoft Docs — платформа для обмена знаниями по продуктам Microsoft, включая SQL Server.