Cum să verificați versiunea SQL Server (Programare, Sql Server 2008, Versiunea)

Yameen Bashir a intrebat.

Care sunt modalitățile posibile de a determina versiunea SQL Server implementată?

Am încercat să o fac folosind software-ul SQL Server. Vreau să o fac folosind o instrucțiune SQL din linia de comandă.

7 răspunsuri
Imran

Următoarele sunt posibile modalități de a vedea versiunea:

Metoda 1: Conectați-vă la instanța de SQL Server, apoi rulați următoarea interogare:

Select @@version

Un exemplu de ieșire a acestei interogări este următorul:

Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009 
10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express 
Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

Metoda 2: Conectați-vă la server utilizând Object Explorer în SQL Server Management Studio. După ce Object Explorer este conectat, acesta va afișa informațiile despre versiune între paranteze, împreună cu numele de utilizator care este utilizat pentru a se conecta la instanța specifică de SQL Server.

Metoda 3: Uitați-vă la primele câteva linii din fișierul Errorlog pentru instanța respectivă. În mod implicit, jurnalul de erori este localizat la Program FilesMicrosoft SQL ServerMSSQL.nMSSQLLOGERRORLOG și ERRORLOG.n fișiere. Intrările pot semăna cu următoarele:

2011-03-27 22:31:33.50 Server      Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)                 Mar 29 2009 10:11:52                 Copyright (c) 1988-2008 Microsoft Corporation                Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )

După cum puteți vedea, această intrare oferă toate informațiile necesare despre produs, cum ar fi versiunea, nivelul produsului, 64 de biți față de 32 de biți, ediția SQL Server și versiunea sistemului de operare pe care se execută SQL Server.

Metoda 4: Conectați-vă la instanța de SQL Server, apoi rulați următoarea interogare:

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

Notă Această interogare funcționează cu orice instanță de SQL Server 2000 sau cu o versiune ulterioară.

Comentarii

  • Am constatat că metoda 4 este mai fiabilă decât metoda 1 – am avut servere pe care nu a fost instalat corect un service pack, unde metoda 1 și metoda 4 au dat rezultate diferite, dar metoda 4 a fost corectă. –  > Por Kaganar.
Linga
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)

Dă 8.00, 9.00, 10.00 și 10.50 pentru SQL 2000, 2005, 2008 și, respectiv, 2008R2.

De asemenea, încercați procedura extinsă a sistemului xp_msver. Puteți apela această procedură stocată astfel

exec master..xp_msver

AndrewD

TL;DR

SQLCMD -S (LOCAL) -E -V 16 -Q "IF(ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT),0)<11) RAISERROR('You need SQL 2012 or later!',16,1)"
IF ERRORLEVEL 1 GOTO :ExitFail

Aceasta utilizează SQLCMD (vine cu SQL Server) pentru a se conecta la instanța locală a serverului folosind Windows auth, aruncă o eroare dacă o verificare a versiunii eșuează și returnează valoarea @@ERROR ca linie de comandă ERRORLEVEL if >= 16 (și a doua linie merge la :ExitFail etichetă în cazul în care eticheta menționată mai sus ERRORLEVEL este >= 1).

Watchas, Gotchas & Mai multe informații

Pentru SQL 2000+ puteți utiliza SERVERPROPERTY pentru a determina o mare parte din aceste informații.

În timp ce SQL 2008+ suportă ProductMajorVersion & ProductMinorVersion proprietăți, ProductVersion există încă din 2000 (reamintind că, dacă o proprietate nu este suportată, funcția returnează NULL).

Dacă sunteți interesat de versiunile anterioare, puteți utiliza funcția PARSENAME pentru a împărți ProductVersion (reamintind că „părțile” sunt numerotate de la dreapta la stânga, de ex. PARSENAME('a.b.c', 1) returnează c).

De asemenea, rețineți că PARSENAME('a.b.c', 4) returns NULL, deoarece SQL 2005 și versiunile anterioare foloseau doar 3 părți în numărul de versiune!

Deci, pentru SQL 2008+ puteți folosi pur și simplu:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(SERVERPROPERTY('ProductMajorVersion')  AS INT) AS ProductMajorVersion,
    CAST(SERVERPROPERTY ('ProductMinorVersion') AS INT) AS ProductMinorVersion;

Pentru SQL 2000-2005 puteți folosi:

SELECT
    SERVERPROPERTY('ProductVersion') AS ProductVersion,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) AS ProductVersion_Major,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 3 END) AS INT) AS ProductVersion_Minor,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 1 ELSE 2 END) AS INT) AS ProductVersion_Revision,
    CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 0 ELSE 1 END) AS INT) AS ProductVersion_Build;

(numărul PARSENAME(...,0) este un hack pentru a îmbunătăți lizibilitatea)

Deci, o verificare pentru o versiune SQL 2000+ ar fi:

IF (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) < 10) -- SQL2008
OR (
    (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 3 ELSE 4 END) AS INT) = 10) -- SQL2008
AND (CAST(PARSENAME(CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME), CASE WHEN SERVERPROPERTY('ProductVersion') IS NULL THEN 2 ELSE 1 END) AS INT) < 5)  -- R2 (this may need to be 50)
   )
    RAISERROR('You need SQL 2008R2 or later!', 16, 1);

Acest lucru este mult mai simplu dacă sunteți interesat doar de SQL 2008+, deoarece SERVERPROPERTY('ProductMajorVersion') returnează NULL pentru versiunile anterioare, astfel încât puteți utiliza:

IF (ISNULL(CAST(SERVERPROPERTY('ProductMajorVersion') AS INT), 0) < 11) -- SQL2012
    RAISERROR('You need SQL 2012 or later!', 16, 1);

Și puteți folosi ProductLevel și Edition (sau EngineEdition) pentru a determina RTM / SPn / CTPn și, respectiv, Dev / Std / Ent / etc.

SELECT
    CAST(SERVERPROPERTY('ProductVersion') AS SYSNAME) AS ProductVersion,
    CAST(SERVERPROPERTY('ProductLevel') AS SYSNAME)   AS ProductLevel,
    CAST(SERVERPROPERTY('Edition') AS SYSNAME)        AS Edition,
    CAST(SERVERPROPERTY('EngineEdition') AS INT)      AS EngineEdition;

Pentru informarea dumneavoastră, principalele numere de versiuni SQL sunt:

  • 8 = SQL 2000
  • 9 = SQL 2005
  • 10 = SQL 2008 (și 10.5 = SQL 2008R2)
  • 11 = SQL 2012
  • 12 = SQL 2014
  • 13 = SQL 2016
  • 14 = SQL 2017

Și toate acestea funcționează și pentru SQL Azure!

EDITAT:Este posibil să doriți, de asemenea, să verificați Nivelul de compatibilitate DB deoarece ar putea fi setat la o compatibilitate mai mică.

IF EXISTS (SELECT * FROM sys.databases WHERE database_id=DB_ID() AND [compatibility_level] < 110)
    RAISERROR('Database compatibility level must be SQL2008R2 or later (110)!', 16, 1)

Imad Ullah

Iată ce am făcut eu pentru a găsi versiunea: scrieți pur și simplu SELECT @@version și vă va da versiunea.

Vikas Lalwani

Pur și simplu folosiți

SELECT @@VERSION

Exemplu de ieșire

Microsoft SQL Server 2012 - 11.0.2100.60 (X64) 
Feb 10 2012 19:39:15 
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )

Sursă: Cum să verificați versiunea serverului sql? (Diverse moduri explicate)

R.Alonso
select charindex(  'Express',@@version)

dacă această valoare este 0 nu este o ediție expresă

Francesco Mantovani

Acest lucru este deosebit de bun dacă intenționați să migrați la Azure

Vă oferă o mulțime de informații dacă căutați probleme de compatibilitate:

SELECT
    @@servername AS 'Server Name'
   ,CONNECTIONPROPERTY('local_net_address') AS [IP Address]
   ,d.name AS [Database_Name]
   ,d.compatibility_level
   ,@@version AS 'Version'
   ,CASE
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '8%' THEN 'SQL2000'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '9%' THEN 'SQL2005'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '10.0%' THEN 'SQL2008'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '10.5%' THEN 'SQL2008 R2'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '11%' THEN 'SQL2012'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '12%' THEN 'SQL2014'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '13%' THEN 'SQL2016'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '14%' THEN 'SQL2017'
        WHEN CONVERT(VARCHAR(128), SERVERPROPERTY('productversion')) LIKE '15%' THEN 'SQL2019'
        ELSE 'unknown'
    END AS SQL_Server_Version,
   d.collation_name
   ,(SUM(CAST(mf.size AS BIGINT)) * 8 / 1024) / 1024 AS Size_GBs
FROM sys.master_files mf
INNER JOIN sys.databases d
    ON d.database_id = mf.database_id
WHERE d.database_id > 4 -- Skip system databases
GROUP BY d.name
        ,d.compatibility_level
        ,d.collation_name
ORDER BY d.name