[sql-server-2008] SQL Server 버전 확인 방법

배포 된 SQL Server 버전을 확인하는 가능한 방법은 무엇입니까?

SQL Server 소프트웨어를 사용하여 시도했습니다. 명령 줄 SQL 문을 사용하여 수행하고 싶습니다.



답변

다음은 버전을 확인하는 가능한 방법입니다.

방법 1 : SQL Server 인스턴스에 연결 한 후 다음 쿼리를 실행합니다.

Select @@version

이 쿼리의 출력 예는 다음과 같습니다.

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009
10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express
Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

방법 2 : SQL Server Management Studio에서 개체 탐색기를 사용하여 서버에 연결합니다. 개체 탐색기가 연결되면 SQL Server의 특정 인스턴스에 연결하는 데 사용되는 사용자 이름과 함께 괄호 안에 버전 정보가 표시됩니다.

방법 3 : 해당 인스턴스에 대한 오류 로그 파일의 처음 몇 줄을 확인합니다. 기본적으로 오류 로그는 Program Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGand ERRORLOG.nfiles에 있습니다. 항목은 다음과 유사 할 수 있습니다.

2011-03-27 22:31:33.50 Server      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)                 Mar 29 2009 10:11:52                 Copyright (c) 1988-2008 Microsoft Corporation                Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

보시다시피이 항목은 버전, 제품 수준, 64 비트 대 32 비트, SQL Server 버전 및 SQL Server가 실행중인 OS 버전과 같은 제품에 필요한 모든 정보를 제공합니다.

방법 4 : SQL Server 인스턴스에 연결하고 다음 쿼리를 실행합니다.

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

참고이 쿼리는 SQL Server 2000 이상의 모든 인스턴스에서 작동합니다.


답변

declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

SQL 2000, 2005, 2008 및 2008R2에 대해 각각 8.00, 9.00, 10.00 및 10.50을 제공합니다.

또한 시스템 확장 절차를 시도하십시오 xp_msver. 이 저장 프로 시저를 다음과 같이 호출 할 수 있습니다.

exec master..xp_msver


답변

TL; DR

SQLCMD -S (LOCAL) -E -V 16 -Q "IF(ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT),0)<11) RAISERROR('You need SQL 2012 or later!',16,1)"
IF ERRORLEVEL 1 GOTO :ExitFail

이것은 SQLCMD (SQL Server와 함께 제공됨 )를 사용하여 Windows 인증을 사용하여 로컬 서버 인스턴스에 연결하고, 버전 확인에 실패하면 오류를 발생시키고 > = 16 인 경우 @@ERROR명령 줄로를 반환합니다 ERRORLEVEL(그리고 두 번째 줄은 :ExitFail레이블로 이동합니다. 앞서 말한ERRORLEVEL 것은> = 1).

Watchas, Gotchas 및 추가 정보

SQL 2000+의 경우 SERVERPROPERTY 를 사용하여 많은 정보를 확인할 수 있습니다 .

SQL 2008+는 ProductMajorVersion& ProductMinorVersion속성을 지원하지만 ProductVersion2000 년부터 사용되었습니다 (속성이 지원되지 않으면 함수가를 반환 NULL함을 기억하십시오 ).

이전 버전에 관심이있는 경우 PARSENAME함수를 사용하여 분할 할 수 있습니다 ProductVersion( “부분”은 오른쪽에서 왼쪽으로 번호가 매겨져 있습니다. 즉을 PARSENAME('a.b.c', 1)반환합니다 c).

또한 SQL 2005 및 이전 버전에서는 버전 번호에서 3 개 부분 만 사용했기 때문에이 PARSENAME('a.b.c', 4)반환 된다는 점을 기억하십시오 NULL!

따라서 SQL 2008+의 경우 다음을 간단히 사용할 수 있습니다.

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(SERVERPROPERTY('ProductMajorVersion')  AS INT) AS ProductMajorVersion,
    CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;

SQL 2000-2005의 경우 다음을 사용할 수 있습니다.

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;

( PARSENAME(...,0)가독성을 높이기위한 해킹)

따라서 SQL 2000+ 버전 확인은 다음과 같습니다.

IF (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) < 10) -- SQL2008
OR (
    (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) = 10) -- SQL2008
AND (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 1 END) AS INT) < 5)  -- R2 (this may need to be 50)
   )
    RAISERROR('You need SQL 2008R2 or later!', 16, 1);

이전 버전을 SERVERPROPERTY('ProductMajorVersion')반환 NULL하기 때문에 SQL 2008+에만 관심이있는 경우 훨씬 간단 하므로 다음을 사용할 수 있습니다.

IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
    RAISERROR('You need SQL 2012 or later!', 16, 1);

그리고 당신은 사용할 수 있습니다 ProductLevelEdition(또는 EngineEditionRTM / SP 결정하기 위해) 특성을 N / CTP N 및 데브 / 표준 / 엔트 / 등 각각을.

SELECT
    CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME) AS ProductVersion,
    CAST(SERVERPROPERTY('ProductLevel') AS SYSNAME)   AS ProductLevel,
    CAST(SERVERPROPERTY('Edition') AS SYSNAME)        AS Edition,
    CAST(SERVERPROPERTY('EngineEdition') AS INT)      AS EngineEdition;

참고로 주요 SQL 버전 번호 는 다음과 같습니다.

  • 8 = SQL 2000
  • 9 = SQL 2005
  • 10 = SQL 2008 (및 10.5 = SQL 2008R2)
  • 11 = SQL 2012
  • 12 = SQL 2014
  • 13 = SQL 2016
  • 14 = SQL 2017

그리고이 모든 것이 SQL Azure에서도 작동합니다!

수정 됨 : 더 낮은 호환성으로 설정할 수 있으므로 DB 호환성 수준
을 확인할 수도 있습니다.

IF EXISTS (SELECT * FROM sys.databases WHERE database_id=DB_ID() AND [compatibility_level] < 110)
    RAISERROR('Database compatibility level must be SQL2008R2 or later (110)!', 16, 1)


답변

버전을 찾기 위해 내가 한 작업은 다음과 같습니다.
버전을 찾기 위해 내가 한 작업은 다음과 같습니다. 작성 SELECT @@version하면 버전이 제공됩니다.


답변

간단히 사용

SELECT @@VERSION

샘플 출력

Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )

출처 : SQL Server 버전 확인 방법 (다양한 방법 설명)


답변

select charindex(  'Express',@@version)

이 값이 0이면 Express Edition이 아닙니다.


답변