usuarios - Cómo obtener el nombre de instancia actual de T-SQL
server name sql server 2017 (6)
¿Cómo puedo obtener el servidor SQL Server y el nombre de la instancia de la conexión actual, usando un script T-SQL?
¿Por qué detenerse solo en el nombre de la instancia? Puede inventariar su entorno 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
Acabo de encontrar la respuesta, en esta pregunta SO (literalmente, dentro de la pregunta, no cualquier respuesta):
SELECT @@servername
devuelve servername / instance siempre que esta no sea la instancia predeterminada
SELECT @@servicename
devuelve el nombre de la instancia, incluso si este es el predeterminado (MSSQLSERVER)
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 propiedad
ServerName
de la funciónSERVERPROPERTY
y@@SERVERNAME
devuelven información similar. La propiedadServerName
proporciona el servidor de Windows y el nombre de la instancia que conforman la instancia de servidor única.@@SERVERNAME
proporciona el nombre del servidor local actualmente configurado.
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.
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'')
otro método para encontrar el nombre de la instancia: haga clic 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 para ver el nombre de la instancia.
SELECT @@servername
le dará datos como server/instanceName
Para obtener solo instanceName
, debe ejecutar select @@ServiceName
query.