Cách kiểm tra phiên bản SQL Server


Câu trả lời:


227

Sau đây là những cách có thể để xem phiên bản:

Phương pháp 1: Kết nối với phiên bản của SQL Server và sau đó chạy truy vấn sau:

Select @@version

Một ví dụ về đầu ra của truy vấn này như sau:

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: )

Phương pháp 2: Kết nối với máy chủ bằng cách sử dụng Object Explorer trong SQL Server Management Studio. Sau khi Object Explorer được kết nối, nó sẽ hiển thị thông tin phiên bản trong ngoặc đơn, cùng với tên người dùng được sử dụng để kết nối với phiên bản cụ thể của SQL Server.

Phương pháp 3: Xem xét một vài dòng đầu tiên của tệp Errorlog cho trường hợp đó. Theo mặc định, nhật ký lỗi được đặt tại Tệp Chương trình \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGERRORLOG.ncác tệp. Các mục có thể giống như sau:

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: )

Như bạn có thể thấy, mục nhập này cung cấp tất cả các thông tin cần thiết về sản phẩm, chẳng hạn như phiên bản, cấp độ sản phẩm, 64 bit so với 32 bit, phiên bản SQL Server và phiên bản HĐH mà SQL Server đang chạy.

Phương pháp 4: Kết nối với phiên bản của SQL Server, rồi chạy truy vấn sau:

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

Lưu ý Truy vấn này hoạt động với mọi phiên bản SQL Server 2000 hoặc phiên bản mới hơn


6
Tôi đã thấy Phương pháp 4 đáng tin cậy hơn Phương pháp 1 - Tôi đã có các máy chủ không cài đặt gói dịch vụ chính xác trong đó Phương pháp 1 và Phương pháp 4 trả về các kết quả khác nhau, nhưng Phương pháp 4 là chính xác.
Kaganar

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

Cung cấp 8,00, 9,00, 10,00 và 10,50 cho SQL 2000, 2005, 2008 và 2008R2 tương ứng.

Ngoài ra, hãy thử các thủ tục mở rộng hệ thống xp_msver. Bạn có thể gọi thủ tục được lưu trữ này như

exec master..xp_msver

2

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

Điều này sử dụng SQLCMD (đi kèm với SQL Server) để kết nối với phiên bản máy chủ cục bộ bằng Windows auth, đưa ra lỗi nếu kiểm tra phiên bản không thành công và trả về @@ERRORdòng lệnh ERRORLEVELnếu> = 16 (và dòng thứ hai đi đến :ExitFailnhãn nếu đã nói ở trên ERRORLEVELlà> = 1).

Watchas, Gotchas và thêm thông tin

Đối với SQL 2000+, bạn có thể sử dụng SERVERPROPERTY để xác định nhiều thông tin này.

Mặc dù SQL 2008+ hỗ trợ các thuộc tính ProductMajorVersion& ProductMinorVersion, ProductVersionđã có từ năm 2000 (hãy nhớ rằng nếu một thuộc tính không được hỗ trợ thì hàm sẽ trả về NULL).

Nếu bạn quan tâm đến các phiên bản trước đó, bạn có thể sử dụng PARSENAMEchức năng để phân chia ProductVersion(nhớ "các phần" được đánh số từ phải sang trái tức là PARSENAME('a.b.c', 1)trả về c).

Cũng nên nhớ PARSENAME('a.b.c', 4)trả về NULL, vì SQL 2005 trở về trước chỉ sử dụng 3 phần trong số phiên bản!

Vì vậy, đối với SQL 2008+, bạn chỉ cần sử dụng:

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

Đối với SQL 2000-2005, bạn có thể sử dụng:

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;

(đây PARSENAME(...,0)là một bản hack để cải thiện khả năng đọc)

Vì vậy, kiểm tra phiên bản SQL 2000+ sẽ là:

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);

Điều này đơn giản hơn nhiều nếu bạn chỉ quan tâm đến SQL 2008+ vì SERVERPROPERTY('ProductMajorVersion')trả về NULLcác phiên bản cũ hơn, vì vậy bạn có thể sử dụng:

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

Và bạn có thể sử dụng các thuộc tính ProductLevelEdition(hoặc EngineEdition) để xác định RTM / SP n / CTP n và Dev / Std / Ent / etc tương ứng.

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;

FYI số phiên bản SQL chính là:

  • 8 = SQL 2000
  • 9 = SQL 2005
  • 10 = SQL 2008 (và 10,5 = SQL 2008R2)
  • 11 = SQL 2012
  • 12 = SQL 2014
  • 13 = SQL 2016
  • 14 = SQL 2017

Và tất cả điều này cũng hoạt động cho SQL Azure!

EDITED: Bạn cũng có thể muốn kiểm tra mức độ tương thích DB của mình vì nó có thể được đặt thành mức độ tương thích thấp hơn.

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)

1

Đây là những gì tôi đã làm để tìm phiên bản Đây là những gì tôi đã làm để tìm phiên bản: chỉ cần viết SELECT @@versionvà nó sẽ cung cấp cho bạn phiên bản.



0
select charindex(  'Express',@@version)

nếu giá trị này là 0 thì không phải là phiên bản nhanh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.