كيف يمكنك التحقق من إصدار SQL Server لقاعدة البيانات باستخدام TSQL؟

StackOverflow https://stackoverflow.com/questions/59444

  •  09-06-2019
  •  | 
  •  

سؤال

هل هناك إجراء مخزن في النظام للحصول على الإصدار #؟

هل كانت مفيدة؟

المحلول

يحاول

SELECT @@VERSION 

أو بالنسبة لـ SQL Server 2000 وما فوق، من الأسهل تحليل ما يلي :)

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

من: http://support.microsoft.com/kb/321185

نصائح أخرى

حدد @@الإصدار

أعلم أن هذا منشور قديم ولكني قمت بتحديث الكود الموجود في ملف وصلة (المتوفى اعتبارًا من 2013-12-03) المذكور في إجابة منشور من طرف مات روجيش:

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'

بالنسبة لـ SQL Server 2000 والإصدارات الأحدث، أفضل التحليل التالي لإجابة جو:

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 هنا.

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

هناك إجراء مخزن موسع آخر يمكن استخدامه لرؤية معلومات الإصدار:

exec [master].sys.[xp_msver]

إليك القليل من البرنامج النصي الذي أستخدمه لاختبار ما إذا كان الخادم هو 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

ملحوظة :تم التحديث من الإجابة الأصلية (انظر التعليق)

مقالة قاعدة المعارف مرتبطة في مشاركة جو يعد أمرًا رائعًا لتحديد حزم الخدمة التي تم تثبيتها لأي إصدار.وعلى نفس المنوال، مقالة قاعدة المعارف هذه يقوم بتعيين أرقام الإصدارات لإصلاحات عاجلة معينة وتحديثات تراكمية، ولكنه ينطبق فقط على SQL05 SP2 والإصدارات الأحدث.

جرب هذا:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
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

الحصول على إصدار 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).

يحاول

SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber

لمزيد من المعلومات، راجع: الاستعلام عن معلومات الإصدار/الإصدار

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

إذا كان كل ما تريده هو الإصدار الرئيسي لأسباب T-SQL، فإن ما يلي يمنحك سنة إصدار SQL Server لعام 2000 أو أحدث.

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

يعالج هذا الرمز بأمان المسافات وعلامات التبويب الإضافية للإصدارات المختلفة من SQL Server.

جرب هذا:

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

جرب هذا:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top