Wie überprüfen Sie, welche Version von SQL Server für eine Datenbank mit TSQL verwendet wird?

Antworten:

234

Versuchen

SELECT @@VERSION 

oder für SQL Server 2000 und höher ist das Folgende einfacher zu analysieren :)

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

Von: http://support.microsoft.com/kb/321185

Joe Kuemerle
quelle
1
Der zweite funktioniert für mich, und ich füge hinzu, um auf Wikipedia zu überprüfen, um zu verstehen, dass 8.00.xx SQL Server 2000 bedeutet
pdem
30

VERSION AUSWÄHLEN

Brannon
quelle
28

Ich weiß, dass dies ein älterer Beitrag ist, aber ich habe den Code aktualisiert, der in dem Link gefunden wurde (der seit dem 03.12.2013 tot ist), der in der Antwort von Matt Rogish erwähnt wird :

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'
Mark Kram
quelle
14

Für SQL Server 2000 und höher bevorzuge ich die folgende Analyse von Joes Antwort:

declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

Gibt Ergebnisse wie folgt:

Ergebnis Serverversion
8.00 SQL 2000
9.00 SQL 2005
10.00 SQL 2008
10.50 SQL 2008R2
11.00 SQL 2012
12.00 SQL 2014

Grundlegende Liste der Versionsnummern hier oder vollständige Liste von Microsoft hier .

Geoff
quelle
Ich mag das, nett, einfach und über Serverversionen hinweg wiederverwendbar. Ich habe eine leicht modifizierte Version der oben genannten verwendet : select cast(serverproperty('productversion') as varchar) as [result]. Mein Punkt ist, dass ich das Obige über ADO.NETs ausführen ExecuteScalarund dann die Ergebniszeichenfolge als System.VersionObjekt analysieren kann. Wenn Sie es in numerische Werte umwandeln, haben Versionsnummern unterschiedliche Bedeutungen, wenn es um nachfolgende Nullen und die Anzahl der Versionssegmentziffern geht, während eine Zeichenfolge zu einem gültigen VersionObjekt analysiert werden kann, ohne die Konsistenz jeder Versionskomponente zu verlieren.
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
Alex
quelle
3

Hier ist ein Skript, mit dem ich teste, ob ein Server 2005 oder höher ist

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

Hinweis: Aktualisiert von der ursprünglichen Antwort (siehe Kommentar)

Bruce Chapman
quelle
Ich habe gerade festgestellt, dass dies in SQL 2008 nicht funktioniert, da '10' kleiner als '9' ist. Sie können den Wert in der aktualisierten Antwort ändern, um 8, 9, 10 oder was auch immer Sie zum Testen als Mindestwert benötigen
Bruce Chapman
3

Es gibt eine weitere erweiterte gespeicherte Prozedur, mit der die Versionsinformationen angezeigt werden können:

exec [master].sys.[xp_msver]
Zia
quelle
2

Der in Joes Beitrag verlinkte KB-Artikel ist ideal, um festzustellen, welche Service Packs für eine Version installiert wurden. In diesem Sinne ordnet dieser KB-Artikel Versionsnummern bestimmten Hotfixes und kumulativen Updates zu, gilt jedoch nur für SQL05 SP2 und höher.

Matt
quelle
1

Versuche dies:

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

Nur die Hauptversion von SQL Server in einer einzigen Auswahl erhalten:

SELECT  SUBSTRING(ver, 1, CHARINDEX('.', ver) - 1)
FROM (SELECT CAST(serverproperty('ProductVersion') AS nvarchar) ver) as t

Kehrt zurück 8 für SQL 2000, 9für SQL 2005 usw. (getestet bis 2012).

Nux
quelle
1
select substring(@@version,0,charindex(convert(varchar,SERVERPROPERTY('productversion')) ,@@version)+len(convert(varchar,SERVERPROPERTY('productversion')))) 
Vikrant Bagal
quelle
0

Wenn Sie aus T-SQL-Gründen nur die Hauptversion wünschen, geben Sie im Folgenden das Jahr der SQL Server-Version für 2000 oder höher an.

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

Dieser Code behandelt die zusätzlichen Leerzeichen und Registerkarten für verschiedene Versionen von SQL Server ordnungsgemäß.

Allen Ackerman
quelle
0

Versuche dies:

SELECT @@VERSION[server], SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
Arif
quelle
-1

Versuche dies:

SELECT
    'the sqlserver is ' + substring(@@VERSION, 21, 5) AS [sql version]
pruthvi
quelle