Как я могу получить сервер SQL Server и имя экземпляра текущего соединения с помощью сценария T-SQL?
Как я могу получить сервер SQL Server и имя экземпляра текущего соединения с помощью сценария T-SQL?
Ответы:
Только что нашел ответ в этом SO-вопросе (буквально, внутри вопроса, а не ответа):
SELECT @@servername
возвращает имя сервера \ экземпляр, если это не экземпляр по умолчанию
SELECT @@servicename
возвращает имя экземпляра, даже если это значение по умолчанию (MSSQLSERVER)
Как насчет этого:
EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
@value_name='MSSQLSERVER'
Это также получит имя экземпляра. null
означает экземпляр по умолчанию:
SELECT SERVERPROPERTY ('InstanceName')
SELECT @@servername
предоставит вам данные как server/instanceName
Чтобы получить только те, instanceName
вам нужно выполнить select @@ServiceName
запрос.
Я нашел это:
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
@value_name = 'InstalledInstances'
Это даст вам список всех экземпляров, установленных на вашем сервере.
ServerName
СвойствоSERVERPROPERTY
функции и@@SERVERNAME
возвращать подобную информацию.ServerName
Свойство обеспечивает сервера и имя экземпляра Windows , которые вместе составляют уникальный экземпляр сервера.@@SERVERNAME
предоставляет текущее настроенное имя локального сервера.
И пример Microsoft для текущего сервера:
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
Этот сценарий полезен, когда на сервере Windows установлено несколько экземпляров SQL Server, и клиент должен открыть другое соединение с тем же экземпляром, который используется текущим подключением.
Зачем останавливаться только на имени экземпляра? Вы можете провести инвентаризацию своей среды SQL Server следующим образом:
SELECT
SERVERPROPERTY('ServerName') AS ServerName,
SERVERPROPERTY('MachineName') AS MachineName,
CASE
WHEN SERVERPROPERTY('InstanceName') IS NULL THEN ''
ELSE SERVERPROPERTY('InstanceName')
END AS InstanceName,
'' as Port, --need to update to strip from Servername. Note: Assumes Registered Server is named with Port
SUBSTRING ( (SELECT @@VERSION),1, CHARINDEX('-',(SELECT @@VERSION))-1 ) as ProductName,
SERVERPROPERTY('ProductVersion') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ProductMajorVersion') AS ProductMajorVersion,
SERVERPROPERTY('ProductMinorVersion') AS ProductMinorVersion,
SERVERPROPERTY('ProductBuild') AS ProductBuild,
SERVERPROPERTY('Edition') AS Edition,
CASE SERVERPROPERTY('EngineEdition')
WHEN 1 THEN 'PERSONAL'
WHEN 2 THEN 'STANDARD'
WHEN 3 THEN 'ENTERPRISE'
WHEN 4 THEN 'EXPRESS'
WHEN 5 THEN 'SQL DATABASE'
WHEN 6 THEN 'SQL DATAWAREHOUSE'
END AS EngineEdition,
CASE SERVERPROPERTY('IsHadrEnabled')
WHEN 0 THEN 'The Always On Availability Groups feature is disabled'
WHEN 1 THEN 'The Always On Availability Groups feature is enabled'
ELSE 'Not applicable'
END AS HadrEnabled,
CASE SERVERPROPERTY('HadrManagerStatus')
WHEN 0 THEN 'Not started, pending communication'
WHEN 1 THEN 'Started and running'
WHEN 2 THEN 'Not started and failed'
ELSE 'Not applicable'
END AS HadrManagerStatus,
CASE SERVERPROPERTY('IsSingleUser') WHEN 0 THEN 'No' ELSE 'Yes' END AS InSingleUserMode,
CASE SERVERPROPERTY('IsClustered')
WHEN 1 THEN 'Clustered'
WHEN 0 THEN 'Not Clustered'
ELSE 'Not applicable'
END AS IsClustered,
'' as ServerEnvironment,
'' as ServerStatus,
'' as Comments
Чтобы получить список серверов и экземпляров, к которым вы подключены:
select * from Sys.Servers
Чтобы получить список баз данных, которые есть на подключенном сервере:
SELECT * from sys.databases;
Просто чтобы добавить некоторые пояснения к запросам реестра. Они перечисляют только экземпляры совпадающей разрядности (32 или 64) для текущего экземпляра.
Фактический ключ реестра для 32-битных экземпляров SQL в 64-битной ОС:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
Вы можете запросить это в 64-битном экземпляре, чтобы получить все 32-битные экземпляры. 32-разрядный экземпляр, похоже, ограничен Wow6432Node, поэтому не может читать 64-разрядное дерево реестра.
SELECT @@SERVERNAME
дает результат, необходимый для подключения с помощьюsqlcmd -S
. Если это экземпляр MSSQLSERVER по умолчанию, то его нельзя указывать в параметре -S. Это версия для разработчиков 14.0.2002.14 2017, 64-разрядная версия.