Как получить имя текущего экземпляра из T-SQL


Как я могу получить сервер SQL Server и имя экземпляра текущего соединения, используя сценарий T-SQL?

6 61

6 ответов:

только что нашел ответ, в это так вопрос (буквально, внутри вопроса, а не ответа):

SELECT @@servername

возвращает имя_сервера\instance, поскольку это не экземпляр по умолчанию

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')

http://technet.microsoft.com/en-us/library/ms174396.aspx

SELECT @@servername даст вам данные как server/instanceName

до instanceName вы должны запустить select @@ServiceName запрос .

Я нашел вот это:

EXECUTE xp_regread
        @rootkey = 'HKEY_LOCAL_MACHINE',
        @key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
        @value_name = 'InstalledInstances'

это даст вам список всех экземпляров, установленных на вашем сервере.


The ServerName свойства и @@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

другой способ найти имя экземпляра-правый clck на имя базы данных и выберите Свойства, В этой части вы можете увидеть свойства соединения в левом нижнем углу, нажмите, чтобы затем вы можете увидеть имя экземпляра.