ฉันจะรับเซิร์ฟเวอร์ SQL Server และชื่ออินสแตนซ์ของการเชื่อมต่อปัจจุบันโดยใช้สคริปต์ T-SQL ได้อย่างไร
ฉันจะรับเซิร์ฟเวอร์ SQL Server และชื่ออินสแตนซ์ของการเชื่อมต่อปัจจุบันโดยใช้สคริปต์ T-SQL ได้อย่างไร
คำตอบ:
เพิ่งพบคำตอบในคำถาม SO นี้ (ตามตัวอักษรในคำถามไม่ใช่คำตอบใด ๆ ):
SELECT @@servername
ส่งคืน servername \ instance เท่าที่จะไม่ใช่อินสแตนซ์เริ่มต้น
SELECT @@servicename
ส่งคืนชื่ออินสแตนซ์แม้ว่าจะเป็นค่าเริ่มต้น (MSSQLSERVER)
แล้วสิ่งนี้ล่ะ:
EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
@value_name='MSSQLSERVER'
ซึ่งจะได้รับชื่ออินสแตนซ์เช่นกัน null
หมายถึงอินสแตนซ์เริ่มต้น:
SELECT SERVERPROPERTY ('InstanceName')
SELECT @@servername
จะให้ข้อมูลเป็น server/instanceName
หากต้องการรับเฉพาะสิ่งที่instanceName
คุณควรเรียกใช้select @@ServiceName
แบบสอบถาม
หยุดแค่ชื่ออินสแตนซ์ทำไม คุณสามารถจัดเก็บสภาพแวดล้อม SQL Server ของคุณได้ดังนี้:
SELECT
SERVERPROPERTY('ServerName') AS ServerName,
SERVERPROPERTY('MachineName') AS MachineName,
CASE
WHEN SERVERPROPERTY('InstanceName') IS NULL THEN ''
ELSE SERVERPROPERTY('InstanceName')
END AS InstanceName,
'' as Port, --need to update to strip from Servername. Note: Assumes Registered Server is named with Port
SUBSTRING ( (SELECT @@VERSION),1, CHARINDEX('-',(SELECT @@VERSION))-1 ) as ProductName,
SERVERPROPERTY('ProductVersion') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ProductMajorVersion') AS ProductMajorVersion,
SERVERPROPERTY('ProductMinorVersion') AS ProductMinorVersion,
SERVERPROPERTY('ProductBuild') AS ProductBuild,
SERVERPROPERTY('Edition') AS Edition,
CASE SERVERPROPERTY('EngineEdition')
WHEN 1 THEN 'PERSONAL'
WHEN 2 THEN 'STANDARD'
WHEN 3 THEN 'ENTERPRISE'
WHEN 4 THEN 'EXPRESS'
WHEN 5 THEN 'SQL DATABASE'
WHEN 6 THEN 'SQL DATAWAREHOUSE'
END AS EngineEdition,
CASE SERVERPROPERTY('IsHadrEnabled')
WHEN 0 THEN 'The Always On Availability Groups feature is disabled'
WHEN 1 THEN 'The Always On Availability Groups feature is enabled'
ELSE 'Not applicable'
END AS HadrEnabled,
CASE SERVERPROPERTY('HadrManagerStatus')
WHEN 0 THEN 'Not started, pending communication'
WHEN 1 THEN 'Started and running'
WHEN 2 THEN 'Not started and failed'
ELSE 'Not applicable'
END AS HadrManagerStatus,
CASE SERVERPROPERTY('IsSingleUser') WHEN 0 THEN 'No' ELSE 'Yes' END AS InSingleUserMode,
CASE SERVERPROPERTY('IsClustered')
WHEN 1 THEN 'Clustered'
WHEN 0 THEN 'Not Clustered'
ELSE 'Not applicable'
END AS IsClustered,
'' as ServerEnvironment,
'' as ServerStatus,
'' as Comments
ฉันพบสิ่งนี้:
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
@value_name = 'InstalledInstances'
ซึ่งจะให้รายการอินสแตนซ์ทั้งหมดที่ติดตั้งในเซิร์ฟเวอร์ของคุณ
ServerName
ทรัพย์สินของSERVERPROPERTY
ฟังก์ชั่นและ@@SERVERNAME
ผลตอบแทนจากข้อมูลที่คล้ายคลึงกันServerName
คุณสมบัติให้เซิร์ฟเวอร์และอินสแตนซ์ชื่อ Windows ที่ร่วมกันทำขึ้นเช่นเซิร์ฟเวอร์ที่ไม่ซ้ำกัน@@SERVERNAME
ระบุชื่อเซิร์ฟเวอร์ภายในที่กำหนดค่าไว้ในปัจจุบัน
และตัวอย่างของ Microsoft สำหรับเซิร์ฟเวอร์ปัจจุบันคือ:
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
สถานการณ์นี้มีประโยชน์เมื่อมีการติดตั้ง SQL Server หลายอินสแตนซ์บนเซิร์ฟเวอร์ Windows และไคลเอ็นต์ต้องเปิดการเชื่อมต่ออื่นกับอินสแตนซ์เดียวกับที่ใช้โดยการเชื่อมต่อปัจจุบัน
ในการรับรายชื่อเซิร์ฟเวอร์และอินสแตนซ์ที่คุณเชื่อมต่อ:
select * from Sys.Servers
ในการรับรายชื่อฐานข้อมูลที่เซิร์ฟเวอร์ที่เชื่อมต่อมี:
SELECT * from sys.databases;
เพียงเพื่อเพิ่มคำชี้แจงในแบบสอบถามรีจิสทรี โดยจะแสดงเฉพาะอินสแตนซ์ของบิตเนสที่ตรงกัน (32 หรือ 64) สำหรับอินสแตนซ์ปัจจุบัน
คีย์รีจิสทรีจริงสำหรับอินสแตนซ์ SQL 32 บิตบนระบบปฏิบัติการ 64 บิตคือ:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
คุณสามารถค้นหาสิ่งนี้ในอินสแตนซ์ 64 บิตเพื่อรับอินสแตนซ์ 32 บิตทั้งหมดได้เช่นกัน ดูเหมือนว่าอินสแตนซ์ 32 บิตถูก จำกัด ไว้ที่ Wow6432Node ดังนั้นจึงไม่สามารถอ่านแผนผังรีจิสทรี 64 บิตได้
วิธีอื่นในการค้นหาชื่ออินสแตนซ์ - คลิกขวาที่ชื่อฐานข้อมูลและเลือกคุณสมบัติในส่วนนี้คุณสามารถดูคุณสมบัติการเชื่อมต่อที่มุมซ้ายลงคลิกจากนั้นคุณจะเห็นชื่ออินสแตนซ์
SELECT @@SERVERNAME
sqlcmd -S
ถ้าเป็นอินสแตนซ์ MSSQLSERVER ดีฟอลต์ก็ต้องไม่ระบุ -S ในพารามิเตอร์ -S นี่คือใน 2017 14.0.2002.14 รุ่นสำหรับนักพัฒนา 64 บิต