설치된 SQL Server 인스턴스 및 해당 버전을 어떻게 확인할 수 있습니까?


224

내가 수동으로 또는 프로그래밍 방식으로 설치 한 SQL Server / SQL Express 인스턴스를 결정하려고하지만 모든 예제는 이미 특정 인스턴스에 연결되어 있다고 가정하는 SQL 쿼리를 실행하도록 지시합니다. .


1
여기 링크가 SQLCMD으로 확인하는 방법입니다 msdn.microsoft.com/en-us/library/ms165662%28v=sql.90%29.aspx

SQL Server 인스턴스 (서버 이름) 및 버전을 찾는 방법 youtube.com/watch?v=DLrxFXXeLFk
mloskot

당신이 말하는 SQL 쿼리를 말해 줄 수 있습니까?
LearnByReading

1
@LearnByReading 아래의 Mohammed Ifteqar Ahmed의 답변을 참조하십시오.
누가

2
레지스트리를 조사 할 수 있습니다 : pmichaels.net/2016/02/12/…
Paul Michaels

답변:


209

명령 행에서 :

SQLCMD -L

또는

OSQL -L

(참고 : 대문자 L이어야합니다)

네트워크에 설치된 모든 SQL Server가 나열됩니다. SQL Server가 목록에 표시되지 않도록 설정할 수있는 구성 옵션이 있습니다. 이것을하기 위해...

명령 행에서 :

svrnetcn

활성화 된 프로토콜 목록에서 'TCP / IP'를 선택한 다음 속성을 클릭하십시오. '서버 숨기기'확인란이 있습니다.


2
명령 줄 옵션이 마음에 들지만 네트워크로 연결되지 않은 개발자 상자에서 시도한 결과가 다양합니다. 기본적으로 "sqlcmd -L"은 SQL Server Browser 서비스가 실행중인 경우에만 작동했습니다. 예상 되나요?
Matt

그것이 간단하고 스트레이트 일 때 나는 그것을 좋아합니다. Amazon Web Service SQL Server 인스턴스에 입력 할 올바른 서버 이름을 찾는 데 어려움을 겪고있었습니다. ThanX
Mehdi LAMRANI

1
좋은 명령이지만 어떤 이유로 든 네트워크에서 SQLExpress 인스턴스를 감지했지만 로컬 컴퓨터에서 SQLExpress 인스턴스를 감지하지 못했습니다.
스페어 바이트

1
@sparebytes : 여기에 이유 : dba.stackexchange.com/questions/18499/…
DonBecker

시도 :C:\> sqllocaldb i
콘 탄고

82

이 레지스트리 값을 쿼리하여 SQL 버전을 직접 가져올 수 있습니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup\CurrentVersion

또는 인스턴스 이름을 쿼리 한 다음 원하는 인스턴스 이름으로 sqlcmd를 사용할 수 있습니다.

인스턴스 이름을 보려면

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names

그런 다음 이것을 실행하십시오.

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

C ++를 사용하는 경우이 코드를 사용하여 레지스트리 정보를 얻을 수 있습니다.


( 'PRODUCTVERSION'), SERVERPROPERTY ( 'productlevel'), SERVERPROPERTY ( '판') 쇼 전용 서버, 하나가 아닌 경우 또는 설치되어 있지만 중지 서버 실행
나디 Vanin Геннадий Ванин을

고마워, 쿼리가 나를 위해 일했다. 나는 기계를 가지고 있었고 2008과 2008 R2 인 기본 인스턴스와 SQL Express 인스턴스를 알고 싶었습니다. 각 인스턴스에 연결하고 쿼리를 실행하면 버전 번호가 표시됩니다. 숫자를 인터넷 검색하는 것이 쉬웠습니다.
Meligy

3
참고로 "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ <버전> \ Tools \ ClientSetup \ CurrentVersion"과 "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ 인스턴스 이름"이 32 비트 부분에 표시되는 것처럼 보입니다. 레지스트리에 대한 실제 경로 : "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ <instancename>"이 64 비트 하이브에 표시됩니다.
NGaida

레지스트리는 설치된 소프트웨어의 소스 정의입니다. 솔루션을 사용하면 궁극적으로 레지스트리 값을 사용하는 CLI 도구 나 레지스트리를 사용하는 MMC 스냅인을 사용하지 않고 소스로 직접 이동할 수 있습니다. 완벽
barrypicker

76

설치된 모든 인스턴스가 Microsoft Management Console의 서비스 스냅인에 표시되어야합니다. 인스턴스 이름을 얻으려면 시작 | 실행 | Services.msc를 입력하고 "Sql Server (인스턴스 이름)"가있는 모든 항목을 찾습니다.


13
동등한 PowerShell 명령 :Get-Service | ?{ $_.Name -like "MSSQL*" }
orad

2
내 컴퓨터에 MSSQL $ SQLEXPRESS가 표시 이름 SQL Server (SQLEXPRESS)로 실행 중임을 표시합니다. 서버 이름에 어떻게 입력합니까? 테스트 연결은 다음과 같은 오류를 보여줍니다 ... SQL Server에 연결하려고 할 때 네트워크 관련 또는 인스턴스 특정 오류가 발생했습니다
webzy

47

-머신에 설치된 인스턴스 목록을 찾기위한 T-SQL 쿼리

DECLARE @GetInstances TABLE
( Value nvarchar(100),
 InstanceNames nvarchar(100),
 Data nvarchar(100))

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

Select InstanceNames from @GetInstances 

좋은 것! 나는 그것이 sa아닌 것처럼 연결해야한다고 생각 합니까?
jyz

3
+1 인스턴스 정보의 출처는 Brian의 답변과 동일합니다. 누군가 Windows 레지스트리에서 값을 얻기 위해 C # 코드를 작성할 수도 있습니다. 나는 대답이 순간적으로 중복된다고 생각하게했지만 xp_regread에 대해 아는 것이 좋습니다. #감사.
Mzn

쿼리 결과는 인스턴스 이름입니다. 결과에 각 인스턴스의 호환성 수준을 추가 할 수 있습니까?
Marwan Almukh

16

나는이 스레드가 조금 오래되었다는 것을 알고 있지만, 내가 찾고있는 대답을 찾고 공유 할 것이라고 생각하기 전에이 스레드를 발견했습니다. SQLExpress (또는 localdb)를 사용하는 경우 인스턴스 이름을 찾는 간단한 방법이 있습니다. 명령 행에서 다음을 입력하십시오.

> sqllocaldb i

로컬로 설치 한 인스턴스 이름이 나열됩니다. 따라서 전체 서버 이름은 연결할 인스턴스 이름 앞에 (localdb) \를 포함해야합니다. 또한 sqllocaldb를 사용하면 새 인스턴스를 생성하거나 삭제하고 구성 할 수 있습니다. SqlLocalDB 유틸리티를 참조하십시오 .


11

현재 로그인 한 컴퓨터에 설치된 항목을 보려면 가장 간단한 수동 프로세스는 모든 SQL 서비스를 표시하는 시작 메뉴에서 SQL Server 구성 관리자를 여는 것입니다. 해당 하드웨어의 SQL 서비스 (실행 또는 실행 안함) 이것은 SQL Server 2005 이상을 가정합니다. 서비스 관리 콘솔을 사용하는 dotnetengineer 의 권장 사항은 모든 서비스를 표시하며 항상 사용할 수 있어야합니다 (예 : 이전 버전의 SQL Server를 실행중인 경우).

그러나보다 광범위한 검색 프로세스를 찾고 있다면 SQLRecon 및 SQLPing과 같은 타사 도구를 사용하여 네트워크를 검색하고 액세스 권한이있는 서버에서 발견 된 모든 SQL 서비스 인스턴스에 대한 보고서를 작성할 수 있습니다. 이와 같은 도구를 사용한 지 오래되었지만, 그들이 찾은 것, 즉 내가 알지 못하는 소수의 인스턴스에 놀랐습니다. YMMV. 자세한 내용은 Google을 참조하십시오. 그러나이 페이지에는 관련 다운로드가 있다고 생각합니다. http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx


1
SQL Server 구성 관리자가 정확히 필요한 것입니다. 빠르고 쉽습니다.
Chris

8

SQL Server는 응용 프로그램이 현재 네트워크 내에서 SQL Server 인스턴스를 찾을 수 있도록합니다. SqlDataSourceEnumerator 클래스는이 정보를 응용 프로그램 개발자에게 공개하여 보이는 모든 서버에 대한 정보를 포함하는 DataTable을 제공합니다. 이 리턴 된 테이블에는 사용자가 새 연결을 작성하려고 할 때 제공 한 목록과 일치하는 네트워크에서 사용 가능한 서버 인스턴스 목록이 포함되어 있으며 연결 특성 대화 상자에서 사용 가능한 모든 서버가 포함 된 드롭 다운 목록이 확장됩니다. 표시된 결과가 항상 완전한 것은 아닙니다. 사용 가능한 SQL Server 인스턴스에 대한 정보가 포함 된 테이블을 검색하려면 먼저 공유 / 정적 인스턴스 속성을 사용하여 열거자를 검색해야합니다.

using System.Data.Sql;

class Program
{
  static void Main()
  {
    // Retrieve the enumerator instance and then the data.
    SqlDataSourceEnumerator instance =
      SqlDataSourceEnumerator.Instance;
    System.Data.DataTable table = instance.GetDataSources();

    // Display the contents of the table.
    DisplayData(table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
  }

  private static void DisplayData(System.Data.DataTable table)
  {
    foreach (System.Data.DataRow row in table.Rows)
    {
      foreach (System.Data.DataColumn col in table.Columns)
      {
        Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
      }
      Console.WriteLine("============================");
    }
  }
}

msdn http://msdn.microsoft.com/en-us/library/a6t1z9x2(v=vs.80).aspx에서


이 도메인이나 도메인에서 서브넷을 지정해야합니까, 다시 null로 돌아와서 업데이트
Transformer

1
.NET Core를 사용하려는 사람들 SqlDataSourceEnumerator은 아직 구현되지 않았지만 GitHub 문제 에 따라 추가 될 목록에 있습니다 .
Daniel Hill


5

스크립트에서이를 결정하려면 다음을 시도하십시오.

sc \\server_name query | grep MSSQL

참고 : grep은 gnuwin32 도구의 일부입니다


3
findstr대신에 사용할 수 있습니다 grep.
Pablo Montilla

FIND를 사용하여 sc \\ server_name query | "MSSQL"찾기
Julio Nobre

5

Windows 명령 행에서 다음을 입력하십시오.

SC \\server_name query | find /I "SQL Server ("

여기서 "server_name"은 SQL 인스턴스를 표시하려는 원격 서버의 이름입니다.

물론 충분한 권한이 필요합니다.


2008 R2 및 여러 Express 및 LocalDB 인스턴스가 실행중인 내 dev 시스템에서 작동하지 않습니다.
Christoph

4

이 쿼리는 서버 이름과 인스턴스 이름을 가져옵니다.

SELECT @@SERVERNAME, @@SERVICENAME

3
실행중인 쿼리와 관련된 현재 인스턴스의 이름 만 알려줍니다. OP는 설치된 모든 인스턴스 목록을 요청했습니다
Jay Walker

1
이것은 설치된 SQL Server 버전에 대한 정보를 제공하지 않습니다
Ahmad

2

나는 같은 문제가 있었다. "osql -L"명령은 서버 이름 만 표시하고 인스턴스 이름은 표시하지 않았습니다 (내 로컬 SQL Sever 인스턴스 만 표시됨). Wireshark, sqlbrowser.exe (SQL 설치의 공유 폴더에서 찾을 수 있음)를 사용하여 문제에 대한 해결책을 찾았습니다.

로컬 인스턴스는 레지스트리 항목으로 해결됩니다. 원격 인스턴스는 UDP 브로드 캐스트 (포트 1434) 및 SMB에 의해 분석됩니다. "sqlbrowser.exe -c"를 사용하여 요청을 나열하십시오.

내 구성은 1 개의 물리적 및 3 개의 가상 네트워크 어댑터를 사용합니다. "osql -L"명령을 사용한 경우 sqlbrowser는 물리적 어댑터 대신 가상 어댑터 중 하나 (다른 네트워크 세그먼트에 있음)의 요청을 표시했습니다. osql은 메트릭으로 adpater를 선택합니다. "route print"명령으로 메트릭을 볼 수 있습니다. 내 구성에서 라우팅 테이블은 가상 어댑터보다 물리적 어댑터보다 낮은 메트릭을 보여주었습니다. 고급 네트워크 설정에서 자동 메트릭을 선택 취소하여 네트워크 속성에서 인터페이스 메트릭을 변경했습니다. osql은 이제 물리적 어댑터를 사용합니다.


2

또 다른 옵션은 SQLSERVER 검색 report..go를 실행하여 sqlserver의 설치 미디어로 이동 한 후 setup.exe를 두 번 클릭하는 것입니다.

여기에 이미지 설명을 입력하십시오

다음 화면에서 도구로 이동하여 아래와 같이 검색 보고서를 클릭하십시오.

여기에 이미지 설명을 입력하십시오

전체 기능과 함께 존재하는 모든 인스턴스가 표시됩니다. 아래는 내 PC의 스냅 샷입니다. 여기에 이미지 설명을 입력하십시오


1

방금 SQL Server 2008을 설치했지만 데이터베이스 인스턴스에 연결할 수 없습니다. @G Mastros 게시 명령에 활성 인스턴스가 나열되지 않았습니다.

그래서 서비스를 살펴본 결과 SQL Server 에이전트가 비활성화되어 있음을 알았습니다. 자동으로 설정 한 다음 시작하여 수정했습니다.


1

100 대 이상의 서버를 평가할 때도 동일한 문제가 발생했으며 SQL로 구성된 서비스 이름을 찾아보기 위해 C #으로 작성된 스크립트가있었습니다. 서버에 인스턴스가 설치되면 SQL Server는 서비스 이름을 가진 각 인스턴스에 대한 서비스를 추가합니다. 2000에서 2008과 같은 버전마다 다를 수 있지만 인스턴스 이름이있는 서비스가 있습니다.

서비스 이름을 받아서 서비스 이름에서 인스턴스 이름을 얻습니다. 다음은 WMI 쿼리 결과와 함께 사용되는 샘플 코드입니다.

if (ServiceData.DisplayName == "MSSQLSERVER" || ServiceData.DisplayName == "SQL Server (MSSQLSERVER)")
            {
                InstanceData.Name = "DEFAULT";
                InstanceData.ConnectionName = CurrentMachine.Name;
                CurrentMachine.ListOfInstances.Add(InstanceData);
            }
            else
                if (ServiceData.DisplayName.Contains("SQL Server (") == true)
                {
                    InstanceData.Name = ServiceData.DisplayName.Substring(
                                            ServiceData.DisplayName.IndexOf("(") + 1,
                                            ServiceData.DisplayName.IndexOf(")") - ServiceData.DisplayName.IndexOf("(") - 1
                                        );
                    InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                    CurrentMachine.ListOfInstances.Add(InstanceData);
                }
                else
                    if (ServiceData.DisplayName.Contains("MSSQL$") == true)
                    {
                        InstanceData.Name = ServiceData.DisplayName.Substring(
                                                ServiceData.DisplayName.IndexOf("$") + 1,
                                                ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("$") - 1
                                            );

                        InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                        CurrentMachine.ListOfInstances.Add(InstanceData);
                    }

0

간단한 방법은 다음과 같습니다. 시작, 프로그램, Microsoft SQL Server 2005, 구성 도구, SQL Server 구성 관리자, SQL Server 2005 네트워크 구성으로 이동 한 다음 컴퓨터에 설치된 모든 인스턴스를 찾을 수 있습니다.


0

오래된 게시물을 알고 있지만 PoweShell을 사용하여 로컬 또는 원격 컴퓨터에 버전을 포함한 SQL 인스턴스를 설치하고 다른 속성을 가져올 수있는 멋진 솔루션을 찾았습니다.

$MachineName = ‘.’ # Default local computer Replace . with server name for a remote computer

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(‘LocalMachine’, $MachineName)
$regKey= $reg.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL" )
$values = $regkey.GetValueNames()
$values | ForEach-Object {$value = $_ ; $inst = $regKey.GetValue($value); 
              $path = "SOFTWARE\\Microsoft\\Microsoft SQL Server\\"+$inst+"\\MSSQLServer\\"+"CurrentVersion";
              #write-host $path; 
              $version = $reg.OpenSubKey($path).GetValue("CurrentVersion");
                          write-host "Instance" $value;
              write-host  "Version" $version}

안녕 이것은 좋은 방법입니다, 이것을 C # 클래스로 감싸거나 코드에서 이것을 호출하는 방법
변압기

안녕하세요. 이것은 powershell에 대한 첫 번째 시도이므로 도움을 주시면 감사하겠습니다. 이 스크립트를 실행하려고하면 다음 오류가 발생합니다. Aldo는 모든 원격 SQL 서버를 찾을 수 있습니까? SQL Server 및 해당 데이터베이스 목록을 컴파일하려고합니다. 널값 표현식에서는 메소드를 호출 할 수 없습니다. + $ values ​​= $ regkey.GetValueNames ()
대릴 윌슨

0

명령 OSQL -L네트워크의SQLCMD -L 모든 인스턴스 표시합니다 .

서버 의 모든 인스턴스 목록을 원 하고 스크립팅이나 프로그래밍을하고 싶지 않다면 다음과 같이하십시오.

  1. Windows 작업 관리자 시작
  2. "모든 사용자의 프로세스 표시"체크 상자 또는 이와 동등한 체크 박스를 선택하십시오.
  3. "이미지 이름"으로 프로세스 정렬
  4. 모든 sqlsrvr.exe이미지 찾기

인스턴스는 "사용자 이름"열에로 표시되어야합니다 MSSQL$INSTANCE_NAME.

그리고 가난한 서버가 63 개의 인스턴스를 실행 중이라는 생각에서 3 개의 서버가 실행 중이라는 것을 깨닫기 시작했습니다 (이 중 하나는 CPU 부하로 총 깡패처럼 행동합니다 ...)


0

SQL Server 등록 쿼리 "HKLM \ Software \ Microsoft \ Microsoft SQL Server \ 인스턴스 이름 \ SQL"의 인스턴스를 가져옵니다.

또는 SQLCMD -L 사용


-1

SSMS 내에 있으면 사용하기가 더 쉬울 수 있습니다.

SELECT @@Version

3
질문 자체는 SQL 쿼리를 사용하여 버전을 확인하기를 원치 않거나 사용할 수 없음을
나타냅니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.