Come si controlla quale versione di SQL Server per un database che utilizza TSQL?
-
09-06-2019 - |
Domanda
Esiste una procedura memorizzata di sistema per ottenere la versione #?
Soluzione
Tentativo
SELECT @@VERSION
o per SQL Server 2000 e versioni successive quanto segue è più semplice da analizzare :)
SELECT SERVERPROPERTY('productversion')
, SERVERPROPERTY('productlevel')
, SERVERPROPERTY('edition')
Altri suggerimenti
SELEZIONA @@VERSIONE
So che questo è un post più vecchio ma ho aggiornato il codice trovato nel file collegamento (che è morto dal 03-12-2013) menzionato nel file risposta Pubblicato da 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'
Per SQL Server 2000 e versioni successive, preferisco la seguente analisi della risposta di Joe:
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
Fornisce i risultati come segue:
Versione del server dei risultati 8.00 SQL 2000 9.00 SQL 2005 10.00 SQL 2008 10.50 SQL 2008R2 11.00 SQL 2012 12.00 SQL 2014
Elenco di base dei numeri di versione Qui, o un elenco esaustivo di Microsoft Qui.
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
Esiste un'altra procedura memorizzata estesa che può essere utilizzata per visualizzare le informazioni sulla versione:
exec [master].sys.[xp_msver]
Ecco un po' di script che utilizzo per testare se un server è del 2005 o successivo
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
Nota :aggiornato dalla risposta originale (vedi commento)
L'articolo della Knowledge Base collegato in Il post di Joe è ottimo per determinare quali service pack sono stati installati per qualsiasi versione.Sulla stessa linea, questo articolo della Knowledge Base associa i numeri di versione a hotfix specifici e aggiornamenti cumulativi, ma si applica solo a SQL05 SP2 e versioni successive.
Prova questo:
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
Ottenere solo la versione principale di SQL Server in un'unica selezione:
SELECT SUBSTRING(ver, 1, CHARINDEX('.', ver) - 1)
FROM (SELECT CAST(serverproperty('ProductVersion') AS nvarchar) ver) as t
ritorna 8
per SQL 2000, 9
per SQL 2005 e così via (testato fino al 2012).
Tentativo
SELECT @@MICROSOFTVERSION / 0x01000000 AS MajorVersionNumber
Per ulteriori informazioni, vedere: Richiesta di informazioni sulla versione/edizione
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion'))))
Se tutto ciò che desideri è la versione principale per motivi T-SQL, quanto segue ti fornisce l'anno della versione di SQL Server per il 2000 o successivo.
SELECT left(ltrim(replace(@@Version,'Microsoft SQL Server','')),4)
Questo codice gestisce con garbo gli spazi e le schede aggiuntivi per varie versioni di SQL Server.
Prova questo:
SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Prova questo:
SELECT
'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]