Làm cách nào để kiểm tra phiên bản SQL Server nào cho cơ sở dữ liệu bằng TSQL?


Câu trả lời:


234

Thử

SELECT @@VERSION 

hoặc cho SQL Server 2000 trở lên, việc phân tích dễ dàng hơn :)

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

Từ: http://support.microsoft.com/kb/321185


1
Cái thứ hai hoạt động với tôi và tôi thêm vào để kiểm tra trên Wikipedia để hiểu rằng 8,00.xx có nghĩa là máy chủ SQL 2000
pdem


28

Tôi biết đây là một bài viết cũ hơn nhưng tôi đã cập nhật mã được tìm thấy trong liên kết (đã chết vào năm 2013-12-03) được đề cập trong câu trả lời được đăng bởi Matt Rogish :

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

Đối với SQL Server 2000 trở lên, tôi thích cách phân tích câu trả lời sau của Joe:

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

Cho kết quả như sau:

Phiên bản máy chủ kết quả
8,00 SQL 2000
9.00 SQL 2005
10,00 SQL 2008
10,50 SQL 2008R2
11:00 SQL 2012
12,00 SQL 2014

Danh sách cơ bản các số phiên bản tại đây hoặc danh sách đầy đủ từ Microsoft tại đây .


Tôi thích điều này, tốt đẹp, đơn giản và có thể sử dụng lại trên các phiên bản máy chủ. Tôi đã sử dụng một phiên bản sửa đổi một chút ở trên : select cast(serverproperty('productversion') as varchar) as [result]. Quan điểm của tôi là tôi có thể thực hiện các điều trên thông qua ADO.NET ExecuteScalarvà sau đó phân tích chuỗi kết quả dưới dạng một System.Versionđối tượng. Ngoài ra, việc chuyển nó thành số mang ý nghĩa khác nhau cho số phiên bản khi nói đến số 0 và số chữ số phân đoạn phiên bản, trong khi một chuỗi có thể được phân tích cú pháp thành một Versionđối tượng hợp lệ mà không làm mất tính nhất quán của từng thành phần phiên bản.
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

Đây là một chút kịch bản tôi sử dụng để kiểm tra nếu máy chủ là năm 2005 trở lên

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

Lưu ý: cập nhật từ câu trả lời ban đầu (xem bình luận)


Chỉ thấy điều này không hoạt động sql 2008 vì '10' nhỏ hơn '9'. Bạn có thể thay đổi giá trị trong câu trả lời được cập nhật để sử dụng 8, 9, 10 hoặc bất cứ điều gì bạn cần kiểm tra dưới dạng giá trị tối thiểu
Bruce Chapman

3

Có một Thủ tục lưu trữ mở rộng khác có thể được sử dụng để xem thông tin Phiên bản:

exec [master].sys.[xp_msver]

2

Bài viết KB được liên kết trong bài đăng của Joe rất tốt để xác định gói dịch vụ nào đã được cài đặt cho bất kỳ phiên bản nào. Cùng các dòng đó, bài viết KB này ánh xạ số phiên bản cho các hotfix cụ thể và các bản cập nhật tích lũy, nhưng nó chỉ áp dụng cho SQL05 SP2 trở lên.


1

Thử cái này:

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

Chỉ nhận phiên bản SQL Server chính trong một lần chọn:

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

Trả về 8cho SQL 2000, 9cho SQL 2005 và cứ thế (được thử nghiệm đến năm 2012).



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

0

Nếu tất cả những gì bạn muốn là phiên bản chính vì lý do T-SQL, thì phần sau đây cung cấp cho bạn năm của phiên bản SQL Server từ 2000 trở lên.

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

Mã này xử lý một cách duyên dáng các khoảng trắng và tab bổ sung cho các phiên bản SQL Server khác nhau.


0

Thử cái này:

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

-1

Thử cái này:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
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.