T-SQL
是否可以检查ip-address和dns名称是否相同?
答案 0 :(得分:4)
将主机名解析为IP地址是可以在CLR存储过程中轻松完成的。
如果您不熟悉CLR,可能需要从以下文章开始:
至于解析主机名的代码,可以在C#中轻松完成,如下所示:
string hostname = "stackoverflow.com";
IPAddress[] ipList = Dns.GetHostAddresses(hostname);
foreach (IPAddress ip in ipList)
{
// ... check each ip with an IP address you pass
// as a parameter.
}
如果您想知道为什么会收到IP地址列表,您可能有兴趣查看以下Stack Overflow帖子:
答案 1 :(得分:2)
HOST_NAME()
返回客户端的计算机名称。
此代码使用ping
和xp_cmdshell
解析其IP地址:
set nocount on
declare @ip varchar(255), @cmd varchar(100)
set @cmd = 'ping -n 1 ' + HOST_NAME()
create table #temptb (grabfield varchar(255))
insert into #temptb exec master.dbo.xp_cmdshell @cmd
select @ip = substring(grabfield, charindex('[',grabfield)+1,
charindex(']',grabfield)-charindex('[',grabfield)-1) from #temptb where left(grabfield,7) = 'Pinging'
print @ip
drop table #temptb
set nocount off
来源:http://www.sqlservercentral.com/Forums/Topic150196-8-1.aspx
答案 2 :(得分:-1)
您可以使用此查询获取有关连接的大量信息:
SELECT
c.*,s.*
FROM sys.dm_exec_sessions s
INNER JOIN sys.dm_exec_connections c ON s.session_id=c.session_id
WHERE s.session_id = @@SPID
sys.dm_exec_connections.client_net_address
=连接到此服务器的客户端的主机地址。
sys.dm_exec_connections.local_net_address
=表示此连接所针对的服务器上的IP地址。仅适用于使用TCP传输提供程序的连接。
您可以尝试使用如下查询查看是否存在重复的IP:
SELECT
c.client_net_address, COUNT(*) AS CountOf
FROM sys.dm_exec_connections c
GROUP BY c.client_net_address
HAVING count(*)>1