TSQL을 사용하여 데이터베이스의 SQL Server 버전을 어떻게 확인합니까?


답변:


234

시험

SELECT @@VERSION 

또는 SQL Server 2000 이상에서는 다음과 같은 구문 분석이 더 쉽습니다. :)

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

보낸 사람 : http://support.microsoft.com/kb/321185


1
두 번째는 나를 위해 작동하고, 그 8.00.xx 수단의 SQL 서버 2000 이해하기 위해 위키 백과를 확인하기 위해 추가
pdem


28

나는 이것이 오래된 게시물이라는 것을 알고 있지만 Matt Rogish가 게시 한 답변 에 언급 된 링크 (2013-12-03에서 사망) 에있는 코드를 업데이트했습니다 .

DECLARE @ver nvarchar(128)
SET @ver = CAST(serverproperty('ProductVersion') AS nvarchar)
SET @ver = SUBSTRING(@ver, 1, CHARINDEX('.', @ver) - 1)

IF ( @ver = '7' )
   SELECT 'SQL Server 7'
ELSE IF ( @ver = '8' )
   SELECT 'SQL Server 2000'
ELSE IF ( @ver = '9' )
   SELECT 'SQL Server 2005'
ELSE IF ( @ver = '10' )
   SELECT 'SQL Server 2008/2008 R2'
ELSE IF ( @ver = '11' )
   SELECT 'SQL Server 2012'
ELSE IF ( @ver = '12' )
   SELECT 'SQL Server 2014'
ELSE IF ( @ver = '13' )
   SELECT 'SQL Server 2016'
ELSE IF ( @ver = '14' )
   SELECT 'SQL Server 2017'
ELSE
   SELECT 'Unsupported SQL Server Version'

14

SQL Server 2000 이상에서는 Joe의 답변을 다음과 같이 파싱하는 것이 좋습니다.

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

다음과 같은 결과를 제공합니다.

결과 서버 버전
8.00 SQL 2000
9.00 SQL 2005
10.00 SQL 2008
10.50 SQL 2008R2
11.00 SQL 2012
12.00 SQL 2014

버전 번호의 기본 목록은 여기 또는 Microsoft의 전체 목록은 여기 입니다.


나는 서버 버전에서 훌륭하고 간단하며 재사용 할 수있는 것을 좋아합니다. 위의 약간 수정 된 버전을 사용했습니다 select cast(serverproperty('productversion') as varchar) as [result]. 내 요점은 ADO.NET을 통해 위의 내용을 실행 ExecuteScalar한 다음 결과 문자열을 System.Version객체 로 구문 분석 할 수 있다는 것 입니다. 또한 숫자로 확인하면 0과 버전 세그먼트 숫자 수에 따라 버전 번호에 다른 의미를 부여하지만 Version각 버전 구성 요소의 일관성을 유지 하면서 문자열을 유효한 객체 로 구문 분석 할 수 있습니다 .
Ivaylo Slavov

4
CREATE FUNCTION dbo.UFN_GET_SQL_SEVER_VERSION 
(
)
RETURNS sysname
AS
BEGIN
    DECLARE @ServerVersion sysname, @ProductVersion sysname, @ProductLevel sysname, @Edition sysname;

    SELECT @ProductVersion = CONVERT(sysname, SERVERPROPERTY('ProductVersion')), 
           @ProductLevel = CONVERT(sysname, SERVERPROPERTY('ProductLevel')),
           @Edition = CONVERT(sysname, SERVERPROPERTY ('Edition'));
    --see: http://support2.microsoft.com/kb/321185
    SELECT @ServerVersion = 
        CASE 
            WHEN @ProductVersion LIKE '8.00.%' THEN 'Microsoft SQL Server 2000'
            WHEN @ProductVersion LIKE '9.00.%' THEN 'Microsoft SQL Server 2005'
            WHEN @ProductVersion LIKE '10.00.%' THEN 'Microsoft SQL Server 2008'
            WHEN @ProductVersion LIKE '10.50.%' THEN 'Microsoft SQL Server 2008 R2'
            WHEN @ProductVersion LIKE '11.0%' THEN 'Microsoft SQL Server 2012'
            WHEN @ProductVersion LIKE '12.0%' THEN 'Microsoft SQL Server 2014'
        END

    RETURN @ServerVersion + N' ('+@ProductLevel + N'), ' + @Edition + ' - ' + @ProductVersion;

END
GO

3

서버가 2005 이상인 경우 테스트에 사용하는 약간의 스크립트가 있습니다.

declare @isSqlServer2005 bit
select @isSqlServer2005 = case when CONVERT(int, SUBSTRING(CONVERT(varchar(15), SERVERPROPERTY('productversion')), 0, CHARINDEX('.', CONVERT(varchar(15), SERVERPROPERTY('productversion'))))) < 9 then 0 else 1 end
select @isSqlServer2005

참고 : 원래 답변에서 업데이트되었습니다 (주석 참조)


'10'이 '9'보다 작기 때문에 이것이 SQL 2008에서 작동하지 않는다는 것을 알았습니다. 업데이트 된 답변의 값을 8, 9, 10 또는 최소값으로 테스트해야하는 모든 것을 사용하도록 변경할 수 있습니다.
Bruce Chapman

3

버전 정보를 보는 데 사용할 수있는 또 다른 확장 저장 프로 시저가 있습니다.

exec [master].sys.[xp_msver]

2

Joe의 게시물에 링크 된 KB 기사 는 모든 버전에 어떤 서비스 팩이 설치되어 있는지 확인하는 데 유용합니다. 이 같은 기사 와 함께이 기술 자료 문서 는 버전 번호를 특정 핫픽스 및 누적 업데이트에 매핑하지만 SQL05 SP2 이상에만 적용됩니다.


1

이 시도:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN

1
SELECT 
@@SERVERNAME AS ServerName,
CASE WHEN LEFT(CAST(serverproperty('productversion') as char), 1) = 9 THEN '2005'
 WHEN LEFT(CAST(serverproperty('productversion') as char), 2) = 10 THEN '2008'
 WHEN LEFT(CAST(serverproperty('productversion') as char), 2) = 11 THEN '2012'
END AS MajorVersion,
SERVERPROPERTY ('productlevel') AS MinorVersion, 
SERVERPROPERTY('productversion') AS FullVersion, 
SERVERPROPERTY ('edition') AS Edition

1

한 번의 선택으로 주요 SQL Server 버전 만 가져 오기 :

SELECT  SUBSTRING(ver, 1, CHARINDEX('.', ver) - 1)
FROM (SELECT CAST(serverproperty('ProductVersion') AS nvarchar) ver) as t

8SQL 2000, 9SQL 2005 등을 반환 합니다 (2012 년까지 테스트).



1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 

0

원하는 모든 것이 T-SQL의 주요 버전 인 경우 다음은 2000 년 이후의 SQL Server 버전 연도입니다.

SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)

이 코드는 다양한 버전의 SQL Server에 대한 추가 공간과 탭을 정상적으로 처리합니다.


0

이 시도:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

-1

이 시도:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.