배포 된 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\ERRORLOG
and ERRORLOG.n
files에 있습니다. 항목은 다음과 유사 할 수 있습니다.
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
속성을 지원하지만 ProductVersion
2000 년부터 사용되었습니다 (속성이 지원되지 않으면 함수가를 반환 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);
그리고 당신은 사용할 수 있습니다 ProductLevel
및 Edition
(또는 EngineEdition
RTM / 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
샘플 출력
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: )
답변
select charindex( 'Express',@@version)
이 값이 0이면 Express Edition이 아닙니다.