Як я можу отримати сервер 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, 64-розрядна.