La primer opción es:
-- ============================================= -- Create: Andrés Aiello -- Create date: 17/10/11 -- Description: Como obtener la ip y puerto del servidor -- ============================================= -- Obtengo la info basandome en mi conexion SELECT local_net_address, local_tcp_port FROM sys.dm_exec_connections c WHERE c.session_id = @@SPID
Esta opción lo que hace es buscar en la metadata de la conexion que yo tengo establecida cual es la ip de destino. Suena muy práctico y lo es en la mayoría de los casos. Esto puedo usarlo tanto de forma directa como dentro de un sp.
Ahora bien, si deseo programar esto para, por ejemplo, guardar una auditoría, entonces llamaré a el sp correspondiente desde un job (suena lógico). Y sorpresivamente me dará como resultado NULL. ¿a que se debe? Si miramos con mas detalle, cuando ejecutamos desde el job hay una diferencia en una de las columnas que no nos estamos trayendo, y esta es net_transport. En esa columna el primer caso nos diría TCP porque es una conexion TCP/IP. Pero en el caso del job nos arrojaría "shared memory".
Para solucionar esto podemos reemplazar nuestra consulta inicial por:
-- Obtengo la info basandome en cualquier conexion SELECT TOP 1 local_net_address, local_tcp_port, net_transport FROM sys.dm_exec_connections c ORDER BY local_net_address DESC
Para mas info: http://msdn.microsoft.com/en-us/library/ms181509.aspx