كيف يمكنك التحقق من إصدار SQL Server لقاعدة البيانات باستخدام TSQL؟
-
09-06-2019 - |
سؤال
هل هناك إجراء مخزن في النظام للحصول على الإصدار #؟
المحلول
يحاول
SELECT @@VERSION
أو بالنسبة لـ SQL Server 2000 وما فوق، من الأسهل تحليل ما يلي :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
نصائح أخرى
حدد @@الإصدار
أعلم أن هذا منشور قديم ولكني قمت بتحديث الكود الموجود في ملف وصلة (المتوفى اعتبارًا من 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]