T-SQL에서 현재 인스턴스 이름을 가져 오는 방법


90

T-SQL 스크립트를 사용하여 현재 연결의 SQL Server 서버 및 인스턴스 이름을 어떻게 얻을 수 있습니까?


수락 된 답변이 맞습니다. SELECT @@SERVERNAME를 사용하여 연결하는 데 필요한 결과를 생성합니다 sqlcmd -S. 기본 MSSQLSERVER 인스턴스 인 경우 -S 매개 변수에 지정되지 않아야합니다. 이것은 2017 14.0.2002.14 개발자 에디션, 64 비트에 있습니다.
점등

답변:


165

이 SO 질문 에서 답을 찾았습니다 (문자 그대로, 어떤 대답이 아니라 질문 안에 있음).

SELECT @@servername

기본 인스턴스가 아닌 한 servername \ instance를 반환합니다.

SELECT @@servicename

기본값 (MSSQLSERVER) 인 경우에도 인스턴스 이름을 반환합니다.


1
@blasto, 인스턴스가 서버에서 기본값 일 때의 동작 인 것 같습니다. 명명 된 인스턴스로 시도하십시오. 확인 : technet.microsoft.com/en-us/library/ms187944.aspx
Guillermo Gutiérrez 2014 년

10
오답입니다. @@ servername을 사용하면 잘못된 답을 얻을 수 있습니다. SELECT CONVERT (sysname, SERVERPROPERTY ( 'servername'))가 정답입니다. @@ ServerName은 SQL 클러스터 이름을보고하는 반면 serverproperty ( 'servername')는 Windows 클러스터 이름을보고합니다. db에 연결하려면 Windows 클러스터 이름이 필요합니다 (Windows 클러스터 이름은 SQL 클러스터 이름과 다를 수 있습니다. 이는 일반적으로 다른 컴퓨터에 새 SQL-server 버전을 설치할 때 발생합니다 (@@ servername = Environment.MachineName)). 모든 구성을 변경할 필요가 없도록 이전 이름을 유지하고 싶습니다.)
Stefan Steiger 2015

1
@StefanSteiger 연결된 SO 질문의 수락 된 답변은 귀하가 제시 한 솔루션을 나타내지 만 의견은 일부 사람들에게는 작동하지 않음을 나타냅니다.

17

이건 어때:

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


10
SELECT SERVERPROPERTY ( 'InstanceName')는 나에게 NULL을 제공합니다.
Steam

4
대신 SELECT CONVERT (sysname, SERVERPROPERTY ( 'servername'));
Stefan Steiger 2015

1
@Steam : 아마도 기본 인스턴스이기 때문일 것입니다.
Stefan Steiger 2015

10

SELECT @@servername 데이터를 다음과 같이 제공합니다. server/instanceName

만 가져 오려면 쿼리 instanceName를 실행해야합니다 select @@ServiceName.


첫째, 슬래시가 잘못되었습니다. 올바른 형식은 "server \ instance"입니다. 둘째, @@ servername이 서버와 인스턴스를 모두 제공한다는 것이 항상 사실은 아닙니다. 인스턴스가 하나 뿐인 경우 "server"만 반환하기 때문입니다.
Robino

8

나는 이것을 찾았다:

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 인스턴스가 여러 개 설치되어 있고 클라이언트가 현재 연결에서 사용하는 동일한 인스턴스에 대한 다른 연결을 열어야하는 경우에 유용합니다.


SELECT CONVERT (sysname, SERVERPROPERTY ( 'servername')); 정답입니다
Stefan Steiger

8

인스턴스 이름에서 멈추는 이유는 무엇입니까? 다음을 사용하여 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

1
Good Stuff Nate, 저도 비슷하게 향상된 인벤토리 스크립트가 있습니다. 이메일로 사본을 받으려면 저에게 연락하십시오 ... 스크립트는이 스레드에서 초점이 맞지 않습니다.
Hank Freeman

2

연결된 서버 및 인스턴스 목록을 가져 오려면 :

select * from Sys.Servers

연결된 서버에있는 데이터베이스 목록을 가져 오려면 다음을 수행하십시오.

SELECT * from sys.databases;

1

레지스트리 쿼리에 대한 설명을 추가하기 위해. 현재 인스턴스에 대해 일치하는 비트 (32 또는 64)의 인스턴스 만 나열합니다.

64 비트 OS에서 32 비트 SQL 인스턴스의 실제 레지스트리 키는 다음과 같습니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server

64 비트 인스턴스에서이를 쿼리하여 모든 32 비트 인스턴스도 가져올 수 있습니다. 32 비트 인스턴스는 Wow6432Node로 제한되어 있으므로 64 비트 레지스트리 트리를 읽을 수 없습니다.


0

인스턴스 이름을 찾는 또 다른 방법-데이터베이스 이름을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.이 부분에서 왼쪽 아래 모서리에 연결 속성을 볼 수 있습니다. 클릭하면 인스턴스 이름을 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.