มีวิธีใดบ้างที่เป็นไปได้ในการกำหนดเวอร์ชันของ SQL Server ที่ปรับใช้
ฉันได้ลองทำโดยใช้ซอฟต์แวร์ SQL Server ฉันต้องการทำโดยใช้คำสั่ง SQL บรรทัดคำสั่ง
มีวิธีใดบ้างที่เป็นไปได้ในการกำหนดเวอร์ชันของ SQL Server ที่ปรับใช้
ฉันได้ลองทำโดยใช้ซอฟต์แวร์ SQL Server ฉันต้องการทำโดยใช้คำสั่ง SQL บรรทัดคำสั่ง
คำตอบ:
ต่อไปนี้เป็นวิธีที่เป็นไปได้ในการดูเวอร์ชัน:
วิธีที่ 1:เชื่อมต่อกับอินสแตนซ์ของ SQL Server แล้วเรียกใช้แบบสอบถามต่อไปนี้:
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:เชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ Object Explorer ใน SQL Server Management Studio หลังจากเชื่อมต่อ Object Explorer แล้วจะแสดงข้อมูลเวอร์ชันในวงเล็บพร้อมกับชื่อผู้ใช้ที่ใช้เพื่อเชื่อมต่อกับอินสแตนซ์เฉพาะของ SQL Server
วิธีที่ 3:ดูสองสามบรรทัดแรกของไฟล์ Errorlog สำหรับอินสแตนซ์นั้น ตามค่าเริ่มต้นบันทึกข้อผิดพลาดจะอยู่ที่ Program 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 Server และเวอร์ชันของระบบปฏิบัติการที่ SQL Server ทำงานอยู่
วิธีที่ 4:เชื่อมต่อกับอินสแตนซ์ของ SQL Server แล้วเรียกใช้แบบสอบถามต่อไปนี้:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
หมายเหตุแบบสอบถามนี้ทำงานกับอินสแตนซ์ของ SQL Server 2000 หรือรุ่นที่ใหม่กว่า
declare @sqlVers numeric(4,2)
select @sqlVers = left(cast(serverproperty('productversion') as varchar), 4)
ให้ 8.00, 9.00, 10.00 และ 10.50 สำหรับ SQL 2000, 2005, 2008 และ 2008R2 ตามลำดับ
xp_msver
นอกจากนี้ลองขั้นตอนระบบขยาย คุณสามารถเรียกขั้นตอนที่จัดเก็บไว้เช่น
exec master..xp_msver
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
สิ่งนี้ใช้SQLCMD (มาพร้อมกับ SQL Server) เพื่อเชื่อมต่อกับอินสแตนซ์เซิร์ฟเวอร์ภายในโดยใช้ Windows auth ทำให้เกิดข้อผิดพลาดหากการตรวจสอบเวอร์ชันล้มเหลวและส่งคืน@@ERROR
เป็นบรรทัดคำสั่งERRORLEVEL
ถ้า> = 16 (และบรรทัดที่สองไปที่:ExitFail
เลเบลหาก ดังกล่าวERRORLEVEL
คือ> = 1)
Watchas, Gotchas และข้อมูลเพิ่มเติม
สำหรับ SQL 2000+ คุณสามารถใช้SERVERPROPERTYเพื่อกำหนดข้อมูลจำนวนมากได้
ในขณะที่ SQL 2008+ รองรับคุณสมบัติProductMajorVersion
& มีมาตั้งแต่ปี 2000 (โปรดจำไว้ว่าถ้าคุณสมบัติไม่ได้รับการสนับสนุนฟังก์ชันจะส่งคืน)ProductMinorVersion
ProductVersion
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 / SP n / CTP nและ 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;
FYI หมายเลขเวอร์ชันหลักของSQLคือ:
และทั้งหมดนี้ใช้ได้กับ SQL Azure ด้วย!
แก้ไข: คุณอาจต้องการตรวจสอบระดับความเข้ากันได้ของฐานข้อมูลเนื่องจากสามารถตั้งค่าความเข้ากันได้ที่ต่ำกว่า
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)
เพียงแค่ใช้
SELECT @@VERSION
เอาต์พุตตัวอย่าง
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: )
ที่มา: วิธีตรวจสอบเวอร์ชั่นเซิร์ฟเวอร์ sql? (อธิบายวิธีต่างๆ)
select charindex( 'Express',@@version)
หากค่านี้เป็น 0 ไม่ใช่รุ่นด่วน