Como posso obter o servidor SQL Server e o nome da instância da conexão atual, usando um script T-SQL?
Como posso obter o servidor SQL Server e o nome da instância da conexão atual, usando um script T-SQL?
Respostas:
Acabei de encontrar a resposta, nesta pergunta SO (literalmente, dentro da pergunta, nenhuma resposta):
SELECT @@servername
retorna nomedoservidor \ instância, desde que esta não seja a instância padrão
SELECT @@servicename
retorna o nome da instância, mesmo se este for o padrão (MSSQLSERVER)
Que tal agora:
EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
@value_name='MSSQLSERVER'
Isso também obterá o nome da instância. null
significa instância padrão:
SELECT SERVERPROPERTY ('InstanceName')
SELECT @@servername
lhe dará dados como server/instanceName
Para obter apenas o, instanceName
você deve executar a select @@ServiceName
consulta.
Por que parar apenas no nome da instância? Você pode inventariar seu ambiente SQL Server com o seguinte:
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
Eu achei isto:
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
@value_name = 'InstalledInstances'
Isso lhe dará uma lista de todas as instâncias instaladas em seu servidor.
A
ServerName
propriedade daSERVERPROPERTY
função e@@SERVERNAME
retorna informações semelhantes. AServerName
propriedade fornece o servidor Windows e o nome da instância que, juntos, constituem a instância exclusiva do servidor.@@SERVERNAME
fornece o nome do servidor local atualmente configurado.
E o exemplo da Microsoft para o servidor atual é:
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
Este cenário é útil quando há várias instâncias do SQL Server instaladas em um servidor Windows e o cliente deve abrir outra conexão com a mesma instância usada pela conexão atual.
Para obter a lista de servidores e instâncias aos quais você está conectado:
select * from Sys.Servers
Para obter a lista de bancos de dados que o servidor conectado possui:
SELECT * from sys.databases;
Só para esclarecer as dúvidas do registro. Eles listam apenas as instâncias do número de bits correspondente (32 ou 64) para a instância atual.
A chave de registro real para instâncias SQL de 32 bits em um sistema operacional de 64 bits é:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
Você pode consultar isso em uma instância de 64 bits para obter todas as instâncias de 32 bits também. A instância de 32 bits parece restrita ao Wow6432Node, portanto, não pode ler a árvore de registro de 64 bits.
SELECT @@SERVERNAME
produz o resultado necessário para conectar usandosqlcmd -S
. Se for a instância padrão do MSSQLSERVER, então ela não deve ser especificada no parâmetro -S. Isso é em 2017, 14.0.2002.14 Developer edition, 64 bits.