W pewnych przypadkach trzeba ustalić jaki adres IPv4 jest przypisany do serwera. Można oczywiście zajrzeć do widoku sys.dm_exec_connections
Niestety ta metoda nie zadziała jeśli połączenie jest nawiązane przez Shared Memory, albo 127.0.0.1 albo (i to mój przypadek) przez IPv6, a tymczasem potrzebowałem IPv4.
Na całe szczęście udało się znaleźć ciekawy pomysł z wykorzystaniem xm_cmdshell i prostego polecenia ipconfig
https://stackoverflow.com/questions/142142/sql-query-to-get-servers-ip-address
Oto delikatnie zmieniona procedura – u mnie działa!
CREATE PROCEDURE #sp_get_ip_address (@ip VARCHAR(40) OUT)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Line varchar(200)
DECLARE @pos int
SET @ip = NULL
CREATE TABLE #temp (line VARCHAR(200))
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
INSERT INTO #temp EXEC master..xp_cmdshell 'ipconfig'
EXECUTE sp_configure 'show advanced options', 1;
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
SELECT @Line = line
FROM #temp
WHERE UPPER (line) like '%IPV4%ADDRESS%'
IF (ISNULL (@line,'***') != '***')
BEGIN
SET @pos = CHARINDEX (':',@line,1);
SET @ip = RTRIM(LTRIM(SUBSTRING (@line, @pos + 1, LEN(@line) - @pos)))
END
DROP TABLE #temp
SET NOCOUNT OFF
END
GO
DECLARE @ip VARCHAR(40)
EXEC #sp_get_ip_address @ip OUT
DROP PROCEDURE #sp_get_ip_address
SELECT @ip





























