SQL सर्वर संस्करण की जांच कैसे करें


125

तैनात SQL सर्वर संस्करण को निर्धारित करने के संभावित तरीके क्या हैं?

मैंने इसे SQL सर्वर सॉफ़्टवेयर का उपयोग करके करने की कोशिश की है। मैं इसे कमांड लाइन एसक्यूएल स्टेटमेंट का उपयोग करके करना चाहता हूं।



जवाबों:


227

संस्करण को देखने के संभावित तरीके निम्नलिखित हैं:

विधि 1: SQL सर्वर के उदाहरण से कनेक्ट करें, और उसके बाद निम्न क्वेरी चलाएँ:

Select @@version

इस क्वेरी के आउटपुट का एक उदाहरण इस प्रकार है:

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: )

विधि 2: SQL सर्वर प्रबंधन स्टूडियो में ऑब्जेक्ट एक्सप्लोरर का उपयोग करके सर्वर से कनेक्ट करें। ऑब्जेक्ट एक्सप्लोरर कनेक्ट होने के बाद, यह कोष्ठक में संस्करण जानकारी दिखाएगा, साथ में उपयोगकर्ता नाम जो SQL सर्वर के विशिष्ट उदाहरण से कनेक्ट करने के लिए उपयोग किया जाता है।

विधि 3: उस उदाहरण के लिए Errorlog फ़ाइल की पहली कुछ पंक्तियों को देखें। डिफ़ॉल्ट रूप से, त्रुटि लॉग प्रोग्राम Files \ Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGऔर ERRORLOG.nफ़ाइलों पर स्थित है। प्रविष्टियाँ निम्नलिखित के सदृश हो सकती हैं:

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: )

जैसा कि आप देख सकते हैं, यह प्रविष्टि उत्पाद के बारे में सभी आवश्यक जानकारी देती है, जैसे कि संस्करण, उत्पाद स्तर, 64-बिट बनाम 32-बिट, SQL सर्वर का संस्करण और OS संस्करण जिस पर SQL सर्वर चल रहा है।

विधि 4: SQL सर्वर के उदाहरण से कनेक्ट करें, और उसके बाद निम्न क्वेरी चलाएँ:

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

नोट यह क्वेरी SQL Server 2000 या बाद के संस्करण के किसी भी उदाहरण के साथ काम करती है


6
मैंने विधि 4 को विधि 1 की तुलना में अधिक विश्वसनीय पाया है - मेरे पास सर्वर हैं जिन्हें सर्विस पैक सही तरीके से स्थापित नहीं मिला है जहां विधि 1 और विधि 4 ने अलग-अलग परिणाम दिए हैं, लेकिन विधि 4 सही थी।
कागनार

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

क्रमशः SQL 2000, 2005, 2008 और 2008R2 के लिए 8.00, 9.00, 10.00 और 10.50 देता है।

इसके अलावा, सिस्टम विस्तारित प्रक्रिया का प्रयास करें xp_msver। आप इस संग्रहीत प्रक्रिया को कॉल कर सकते हैं जैसे

exec master..xp_msver

2

टी एल; डॉ

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

यह Windows सर्वर का उपयोग कर स्थानीय सर्वर उदाहरण से कनेक्ट करने के लिए SQLCMD (SQL सर्वर के साथ आता है) का उपयोग करता है, यदि संस्करण की जांच विफल हो जाती है और @@ERRORकमांड लाइन के रूप में ERRORLEVELअगर = 16 (और दूसरी पंक्ति :ExitFailलेबल पर जाती है, तो एक त्रुटि को फेंक दें) उपर्युक्त ERRORLEVELहै> = 1)।

Watchas, Gotchas और अधिक जानकारी

SQL 2000+ के लिए आप इस जानकारी का एक बहुत कुछ निर्धारित करने के लिए SERVERPROPERTY का उपयोग कर सकते हैं ।

एसक्यूएल 2008 + का समर्थन करता है जबकि ProductMajorVersionऔर ProductMinorVersionगुण, ProductVersion2000 के बाद से आसपास किया गया है (याद है कि एक संपत्ति समारोह रिटर्न समर्थित नहीं है अगर NULL)।

यदि आप पहले के संस्करणों में रुचि रखते हैं, तो आप PARSENAMEविभाजन को ProductVersionयाद रखने के लिए फ़ंक्शन का उपयोग कर सकते हैं ("भागों" को दाएं से बाएं या PARSENAME('a.b.c', 1)रिटर्न पर गिना जाता है c)।

यह भी याद रखें कि PARSENAME('a.b.c', 4)रिटर्न NULL, क्योंकि SQL 2005 और पहले केवल संस्करण संख्या में 3 भागों का उपयोग किया गया था!

तो SQL 2008+ के लिए आप बस उपयोग कर सकते हैं:

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

SQL 2000-2005 के लिए आप उपयोग कर सकते हैं:

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;

( PARSENAME(...,0)पठनीयता में सुधार के लिए एक हैक है)

तो SQL 2000+ संस्करण के लिए एक जाँच होगी:

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);

यदि आप केवल SQL 2008 में रुचि रखते हैं तो यह बहुत सरल है + क्योंकि पहले के संस्करणों के लिए SERVERPROPERTY('ProductMajorVersion')रिटर्न NULL, इसलिए आप उपयोग कर सकते हैं:

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

और अगर आप उपयोग कर सकते हैं ProductLevelऔर Edition(या EngineEditionनिर्धारित करने के लिए RTM / सपा) गुण n / सीटीपी n और देव / कक्षा / Ent / आदि क्रमशः।

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;

FYI करें मुख्य SQL संस्करण संख्याएँ हैं:

  • 8 = एसक्यूएल 2000
  • 9 = एसक्यूएल 2005
  • 10 = SQL 2008 (और 10.5 = SQL 2008R2)
  • 11 = एसक्यूएल 2012
  • 12 = एसक्यूएल 2014
  • 13 = एसक्यूएल 2016
  • 14 = एसक्यूएल 2017

और यह सब SQL Azure के लिए भी काम करता है!

संपादित करें: आप अपने DB संगतता स्तर की जांच करना चाहते हैं क्योंकि इसे कम संगतता पर सेट किया जा सकता है।

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)

1

यहाँ मैं संस्करण को खोजने के लिए क्या किया है यहां मैंने संस्करण को खोजने के लिए क्या किया है: बस लिखें SELECT @@versionऔर यह आपको संस्करण देगा।



0
select charindex(  'Express',@@version)

यदि यह मान 0 है तो एक एक्सप्रेस संस्करण नहीं है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.