Câu trả lời:
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ô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'
Đố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 .
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 ExecuteScalar
và 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.
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
Đâ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)
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.
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
Thử
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Để biết thêm thông tin, xem: Truy vấn thông tin phiên bản / phiên bản
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion'))))
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.