Réponses:
Essayer
SELECT @@VERSION
ou pour SQL Server 2000 et au-dessus, les éléments suivants sont plus faciles à analyser :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
Je sais que c'est un article plus ancien, mais j'ai mis à jour le code trouvé dans le lien (qui est mort le 03/12/2013) mentionné dans la réponse publiée par 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'
Pour SQL Server 2000 et supérieur, je préfère l'analyse suivante de la réponse de Joe:
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
Donne les résultats comme suit:
Version du serveur de résultats 8.00 SQL 2000 9.00 SQL 2005 10h00 SQL 2008 10.50 SQL 2008R2 11.00 SQL 2012 12h00 SQL 2014
Liste de base des numéros de version ici , ou liste exhaustive de Microsoft ici .
select cast(serverproperty('productversion') as varchar) as [result]
. Mon point est que je peux exécuter ce qui précède via ADO.NET, ExecuteScalar
puis analyser la chaîne de résultat en tant System.Version
qu'objet. En outre, le convertir en numérique donne des significations différentes aux numéros de version en ce qui concerne les zéros de fin et le nombre de chiffres du segment de version, tandis qu'une chaîne peut être analysée en un Version
objet valide sans perdre la cohérence de chaque composant de version.
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
Voici un peu de script que j'utilise pour tester si un serveur est 2005 ou plus tard
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
Remarque: mis à jour à partir de la réponse originale (voir commentaire)
L'article de la base de connaissances lié dans l'article de Joe est idéal pour déterminer quels Service Packs ont été installés pour n'importe quelle version. Dans le même esprit, cet article de la base de connaissances mappe les numéros de version à des correctifs spécifiques et des mises à jour cumulatives, mais il s'applique uniquement à SQL05 SP2 et versions ultérieures.
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
Essayer
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Pour plus d'informations, voir: Requête d'informations sur la version / édition
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion'))))
Si tout ce que vous voulez est la version principale pour des raisons T-SQL, ce qui suit vous donne l'année de la version de SQL Server pour 2000 ou une version ultérieure.
SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)
Ce code gère correctement les espaces et les onglets supplémentaires pour différentes versions de SQL Server.