servidor saber remota puerto para obtener nombre name instancia habilitar está escuchar direccion configurado conexion como abrir sql sql-server

saber - nombre del servidor sql server 2014



SQL-Consulta para obtener la dirección IP del servidor (10)

- Prueba esta secuencia de comandos que funciona según mis necesidades. Reformate para leerlo.

SELECT SERVERPROPERTY(''ComputerNamePhysicalNetBios'') as ''Is_Current_Owner'' ,SERVERPROPERTY(''MachineName'') as ''MachineName'' ,case when @@ServiceName = Right (@@Servername,len(@@ServiceName)) then @@Servername else @@servername +'' / '' + @@Servicename end as ''@@Servername / Servicename'', CONNECTIONPROPERTY(''net_transport'') AS net_transport, CONNECTIONPROPERTY(''local_tcp_port'') AS local_tcp_port, dec.local_tcp_port, CONNECTIONPROPERTY(''local_net_address'') AS local_net_address, dec.local_net_address as ''dec.local_net_address'' FROM sys.dm_exec_connections AS dec WHERE dec.session_id = @@SPID;

¿Existe una consulta en SQL Server 2005 que pueda usar para obtener la IP o el nombre del servidor?


El servidor puede tener varias direcciones IP que está escuchando. Si su conexión tiene el permiso VIEW SERVER STATE server otorgado, puede ejecutar esta consulta para obtener la dirección que ha conectado a SQL Server:

SELECT dec.local_net_address FROM sys.dm_exec_connections AS dec WHERE dec.session_id = @@SPID;

Esta solución no requiere que extienda al sistema operativo a través de xp_cmdshell, que es una técnica que debe deshabilitarse (o al menos protegerse estrictamente) en un servidor de producción. Es posible que deba otorgarle VIEW SERVER STATE al inicio de sesión apropiado, pero ese es un riesgo de seguridad mucho menor que ejecutar xp_cmdshell.

La técnica mencionada por GilM para el nombre del servidor es la preferida:

SELECT SERVERPROPERTY(N''MachineName'');



La mayoría de las soluciones para obtener la dirección IP a través de t-sql se encuentran en estos dos campos:

  1. Ejecute ipconfig.exe través de xp_cmdshell y analice la salida

  2. Consulta DMV sys.dm_exec_connections

No soy fanático de la opción n. ° 1. La habilitación de xp_cmdshell tiene inconvenientes de seguridad, y de todos modos hay muchos análisis implicados. Eso es engorroso. La opción n. ° 2 es elegante. Y es una solución pura de t-sql, que casi siempre prefiero. Aquí hay dos consultas de muestra para la opción n. ° 2:

SELECT c.local_net_address FROM sys.dm_exec_connections AS c WHERE c.session_id = @@SPID; SELECT TOP(1) c.local_net_address FROM sys.dm_exec_connections AS c WHERE c.local_net_address IS NOT NULL;

Sin embargo, a veces, ninguna de las consultas anteriores funciona. La consulta n.º 1 devuelve NULL si está conectado a través de la memoria compartida (inició sesión y ejecuta SSMS en el host SQL). La consulta n.º 2 puede devolver nada si no hay conexiones utilizando un protocolo de memoria no compartida. Este escenario es probable cuando se conecta a una instancia SQL recién instalada. ¿La solución? Forzar una conexión a través de TCP / IP. Para hacerlo, cree una nueva conexión en SSMS y use el prefijo "tcp:" con el nombre del servidor. Luego vuelve a ejecutar cualquiera de las consultas y obtendrás la dirección IP.


Puede obtener [hostname] / [instancename] de la siguiente manera:

SELECT @@SERVERNAME;

Para obtener solo el nombre de host cuando tiene el nombre de host / formato de nombre de instancia:

SELECT LEFT(ltrim(rtrim(@@ServerName)), Charindex(''/', ltrim(rtrim(@@ServerName))) -1)

Alternativamente, como @GilM señaló:

SELECT SERVERPROPERTY(''MachineName'')

Puede obtener la dirección IP real usando esto:

create Procedure sp_get_ip_address (@ip varchar(40) out) as begin Declare @ipLine varchar(200) Declare @pos int set nocount on set @ip = NULL Create table #temp (ipLine varchar(200)) Insert #temp exec master..xp_cmdshell ''ipconfig'' select @ipLine = ipLine from #temp where upper (ipLine) like ''%IP ADDRESS%'' if (isnull (@ipLine,''***'') != ''***'') begin set @pos = CharIndex ('':'',@ipLine,1); set @ip = rtrim(ltrim(substring (@ipLine , @pos + 1 , len (@ipLine) - @pos))) end drop table #temp set nocount off end go declare @ip varchar(40) exec sp_get_ip_address @ip out print @ip

Fuente de la secuencia de comandos SQL .


Sé que esta es una publicación anterior, pero quizás esta solución puede ser útil cuando desee recuperar la dirección IP y el puerto TCP desde una conexión de memoria compartida (por ejemplo, desde un script ejecutado en SSMS localmente en el servidor). La clave es abrir una conexión secundaria a su Servidor SQL utilizando OPENROWSET, en el que especifica ''tcp:'' en su cadena de conexión. El resto del código es simplemente construir SQL dinámico para evitar la limitación de OPENROWSET de no poder tomar variables como sus parámetros.

DECLARE @ip_address varchar(15) DECLARE @tcp_port int DECLARE @connectionstring nvarchar(max) DECLARE @parm_definition nvarchar(max) DECLARE @command nvarchar(max) SET @connectionstring = N''Server=tcp:'' + @@SERVERNAME + '';Trusted_Connection=yes;'' SET @parm_definition = N''@ip_address_OUT varchar(15) OUTPUT , @tcp_port_OUT int OUTPUT''; SET @command = N''SELECT @ip_address_OUT = a.local_net_address, @tcp_port_OUT = a.local_tcp_port FROM OPENROWSET(''''SQLNCLI'''' , '''''' + @connectionstring + '''''' , ''''SELECT local_net_address , local_tcp_port FROM sys.dm_exec_connections WHERE session_id = @@spid '''') as a'' EXEC SP_executeSQL @command , @parm_definition , @ip_address_OUT = @ip_address OUTPUT , @tcp_port_OUT = @tcp_port OUTPUT; SELECT @ip_address, @tcp_port


Una forma más sencilla de obtener el nombre de la máquina sin / InstanceName es:

SELECT SERVERPROPERTY(''MachineName'')


puede usar la consulta de línea de comando y ejecutar en mssql:

exec xp_cmdshell ''ipconfig''


SELECT CONNECTIONPROPERTY(''net_transport'') AS net_transport, CONNECTIONPROPERTY(''protocol_type'') AS protocol_type, CONNECTIONPROPERTY(''auth_scheme'') AS auth_scheme, CONNECTIONPROPERTY(''local_net_address'') AS local_net_address, CONNECTIONPROPERTY(''local_tcp_port'') AS local_tcp_port, CONNECTIONPROPERTY(''client_net_address'') AS client_net_address

El código aquí le dará la dirección IP;

Esto funcionará para una solicitud de cliente remoto a SQL 2008 y posterior.

Si tiene conexiones de memoria compartida permitidas, ejecutar arriba en el servidor le dará

  • "Memoria compartida" como el valor de ''net_transport'', y
  • NULL para ''local_net_address'', y
  • '' <local machine> '' se mostrará en ''dirección_net_cliente''.

''dirección_de_red_cliente'' es la dirección de la computadora desde la que se originó la solicitud, mientras que ''dirección_red_local'' sería el servidor SQL (por lo tanto NULL sobre las conexiones de memoria compartida) y la dirección que le daría a alguien si no puede usar los NetBios del servidor nombre o FQDN por alguna razón.

Recomiendo fuertemente no usar esta respuesta . Habilitar el shell es una muy mala idea en un SQL Server de producción.


select @@servername