คุณตรวจสอบเวอร์ชันของ SQL Server สำหรับฐานข้อมูลโดยใช้ TSQL ได้อย่างไร


คำตอบ:


234

ลอง

SELECT @@VERSION 

หรือสำหรับ SQL Server 2000 ขึ้นไปต่อไปนี้จะแยกวิเคราะห์ได้ง่ายกว่า :)

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

จาก: http://support.microsoft.com/kb/321185


1
อันที่สองใช้ได้กับฉันและฉันเพิ่มเพื่อตรวจสอบใน Wikipedia เพื่อให้เข้าใจว่า 8.00.xx หมายถึงเซิร์ฟเวอร์ SQL 2000
pdem


28

ฉันรู้ว่านี่เป็นโพสต์ที่เก่ากว่า แต่ฉันอัปเดตโค้ดที่พบในลิงก์ (ซึ่งหมดเขตแล้วเมื่อ 2013-12-03) ที่กล่าวถึงในคำตอบที่โพสต์โดย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

สำหรับ 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วัตถุ นอกจากนี้การแปลงเป็นตัวเลขยังให้ความหมายที่แตกต่างกันกับหมายเลขเวอร์ชันเมื่อพูดถึงเลขศูนย์ต่อท้ายและจำนวนหลักเซ็กเมนต์ของเวอร์ชันในขณะที่สตริงสามารถแยกวิเคราะห์กับ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

หมายเหตุ: ปรับปรุงจากคำตอบเดิม (ดูความคิดเห็น)


พบว่าสิ่งนี้ใช้ไม่ได้ sql 2008 เนื่องจาก '10' น้อยกว่า '9' คุณสามารถเปลี่ยนค่าในคำตอบที่อัปเดตเพื่อใช้ 8, 9, 10 หรืออะไรก็ได้ที่คุณต้องการทดสอบเป็นค่าต่ำสุด
Bruce Chapman

3

มีขั้นตอนการจัดเก็บเพิ่มเติมอื่นที่สามารถใช้เพื่อดูข้อมูลเวอร์ชัน:

exec [master].sys.[xp_msver]

2

บทความ KB ที่เชื่อมโยงในโพสต์ของ Joeเหมาะอย่างยิ่งสำหรับการพิจารณาว่ามีการติดตั้ง Service Pack สำหรับเวอร์ชันใด ตามบรรทัดเดียวกันบทความ KB นี้จะแมปหมายเลขเวอร์ชันกับโปรแกรมแก้ไขด่วนเฉพาะและการอัปเดตสะสม แต่จะใช้กับ SQL05 SP2 ขึ้นไปเท่านั้น



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

ส่งคืน8สำหรับ SQL 2000 9สำหรับ SQL 2005 และอื่น ๆ (ทดสอบถึง 2012)




0

ถ้าสิ่งที่คุณต้องการคือเวอร์ชันหลักด้วยเหตุผล T-SQL สิ่งต่อไปนี้จะให้ปีของ SQL Server เวอร์ชัน 2000 หรือใหม่กว่า

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

รหัสนี้จัดการช่องว่างและแท็บพิเศษสำหรับ SQL Server เวอร์ชันต่างๆอย่างสง่างาม


0

ลองสิ่งนี้:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.