Cómo get el nombre de instancia actual de T-SQL

¿Cómo puedo get el server SQL Server y el nombre de la instancia de la connection actual, usando un script T-SQL?

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 pnetworkingeterminada

 SELECT @@servicename 

devuelve el nombre de la instancia, incluso si este es el pnetworkingeterminado (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 pnetworkingeterminada:

 SELECT SERVERPROPERTY ('InstanceName') 

http://technet.microsoft.com/en-us/library/ms174396.aspx

SELECT @@servername le dará datos como server/instanceName

Para get solo 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 list de todas las instancias instaladas en su server.


La propiedad ServerName de la function SERVERPROPERTY y @@SERVERNAME devuelven información similar. La propiedad ServerName proporciona el server de Windows y el nombre de instancia que conforman la instancia de server única. @@SERVERNAME proporciona el nombre del server local actualmente configurado.

Y el ejemplo de Microsoft para el server actual es:

 SELECT CONVERT(sysname, SERVERPROPERTY('servername')); 

Este escenario es útil cuando hay varias instancias de SQL Server instaladas en un server de Windows, y el cliente debe abrir otra connection a la misma instancia utilizada por la connection actual.

¿Por qué detenerse solo en el nombre de la instancia? Puede deviseiar 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 Registenetworking 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('IsClustenetworking') WHEN 1 THEN 'Clustenetworking' WHEN 0 THEN 'Not Clustenetworking' ELSE 'Not applicable' END AS IsClustenetworking, '' as ServerEnvironment, '' as ServerStatus, '' as Comments