¿Cómo puedo obtener el servidor SQL Server y el nombre de la instancia de la conexión actual, usando un script T-SQL?
¿Cómo puedo obtener el servidor SQL Server y el nombre de la instancia de la conexión actual, usando un script T-SQL?
Respuestas:
Acabo de encontrar la respuesta, en esta pregunta SO (literalmente, dentro de la pregunta, no cualquier respuesta):
SELECT @@servername
devuelve servername \ instance en la medida en que esta no sea la instancia predeterminada
SELECT @@servicename
devuelve el nombre de la instancia, incluso si este es el predeterminado (MSSQLSERVER)
Qué tal esto:
EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
@value_name='MSSQLSERVER'
Esto también obtendrá el nombre de la instancia. null
significa instancia predeterminada:
SELECT SERVERPROPERTY ('InstanceName')
SELECT @@servername
te dará datos como server/instanceName
Para obtener solo el instanceName
, debe ejecutar select @@ServiceName
query.
Encontré esto:
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
@value_name = 'InstalledInstances'
Eso le dará una lista de todas las instancias instaladas en su servidor.
La
ServerName
propiedad de laSERVERPROPERTY
función y@@SERVERNAME
devuelve información similar. LaServerName
propiedad proporciona el servidor de Windows y el nombre de la instancia que juntos forman la instancia de servidor única.@@SERVERNAME
proporciona el nombre del servidor local configurado actualmente.
Y el ejemplo de Microsoft para el servidor actual es:
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
Este escenario es útil cuando hay varias instancias de SQL Server instaladas en un servidor de Windows y el cliente debe abrir otra conexión a la misma instancia utilizada por la conexión actual.
¿Por qué detenerse solo en el nombre de la instancia? Puede hacer un inventario de su entorno de SQL Server con lo siguiente:
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
Para obtener la lista del servidor y la instancia a la que está conectado:
select * from Sys.Servers
Para obtener la lista de bases de datos que tiene el servidor conectado:
SELECT * from sys.databases;
Solo para agregar algunas aclaraciones a las consultas del registro. Solo enumeran las instancias del bitness coincidente (32 o 64) para la instancia actual.
La clave de registro real para instancias SQL de 32 bits en un sistema operativo de 64 bits es:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
Puede consultar esto en una instancia de 64 bits para obtener también todas las instancias de 32 bits. La instancia de 32 bits parece restringida al Wow6432Node, por lo que no se puede leer el árbol de registro de 64 bits.
Otro método para encontrar el nombre de la instancia: haga clic con el botón derecho en el nombre de la base de datos y seleccione Propiedades, en esta parte puede ver las propiedades de conexión de la vista en la esquina inferior izquierda, haga clic en eso y luego podrá ver el nombre de la instancia.
SELECT @@SERVERNAME
produce el resultado necesario para conectarse usandosqlcmd -S
. Si es la instancia predeterminada de MSSQLSERVER, entonces no debe especificarse en el parámetro -S. Esto es en 2017 14.0.2002.14 Developer Edition, 64 bits.