T-SQL 스크립트를 사용하여 현재 연결의 SQL Server 서버 및 인스턴스 이름을 어떻게 얻을 수 있습니까?
답변:
이 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
.
나는 이것을 찾았다:
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'));
이 시나리오는 Windows 서버에 SQL Server 인스턴스가 여러 개 설치되어 있고 클라이언트가 현재 연결에서 사용하는 동일한 인스턴스에 대한 다른 연결을 열어야하는 경우에 유용합니다.
인스턴스 이름에서 멈추는 이유는 무엇입니까? 다음을 사용하여 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
연결된 서버 및 인스턴스 목록을 가져 오려면 :
select * from Sys.Servers
연결된 서버에있는 데이터베이스 목록을 가져 오려면 다음을 수행하십시오.
SELECT * from sys.databases;
레지스트리 쿼리에 대한 설명을 추가하기 위해. 현재 인스턴스에 대해 일치하는 비트 (32 또는 64)의 인스턴스 만 나열합니다.
64 비트 OS에서 32 비트 SQL 인스턴스의 실제 레지스트리 키는 다음과 같습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
64 비트 인스턴스에서이를 쿼리하여 모든 32 비트 인스턴스도 가져올 수 있습니다. 32 비트 인스턴스는 Wow6432Node로 제한되어 있으므로 64 비트 레지스트리 트리를 읽을 수 없습니다.
SELECT @@SERVERNAME
를 사용하여 연결하는 데 필요한 결과를 생성합니다sqlcmd -S
. 기본 MSSQLSERVER 인스턴스 인 경우 -S 매개 변수에 지정되지 않아야합니다. 이것은 2017 14.0.2002.14 개발자 에디션, 64 비트에 있습니다.