sql ip计算机名,如何从SQL Server 2008中的IP地址获取计算机名称?

8 个答案:

答案 0 :(得分:2)

您想要的是Reverse DNS lookup。有一些命令行工具可以执行此操作(nslookup.exe),或者您可以使用DnsQuery API。你没有从T-SQL做生意,所以不要试图这样做。解析IP以在客户端中命名。

答案 1 :(得分:2)

您无法在SQL语言中本地执行此操作,您最好的选择是:

1 / shell通过xp-cmdshell运行并运行nslookup,这将需要一些字符串操作来正确获取命令,然后清理输出以返回机器名称

2 /编写一个C#CLR函数,该函数将IP地址作为输入,并使用Dns.GetHostEntry方法来解析并返回名称。

请参阅此处获取文档:

我写了一个非常简单的简单CLR函数,用于从IP地址获取机器名称,请注意没有错误处理或输入检查以确保IP在尝试解决之前有效,并且它赢了'如果你传递一个主机名,给你IP地址,但它可以很容易地修改,包括所有这些东西,它只是为了让你知道它是如何工作的:

using System;

using System.Data;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using Microsoft.SqlServer.Server;

using System.Net;

public partial class UserDefinedFunctions

{

[Microsoft.SqlServer.Server.SqlFunction]

public static SqlString dnsResolve(String ipAddress)

{

IPHostEntry host = Dns.GetHostEntry(ipAddress);

return new SqlString(host.HostName.ToString());

}

}

答案 2 :(得分:1)

我可能错了,但就我所知,SQL Server无法做到你想要的。从IP地址解析计算机名称是您的网络DNS服务器所做的事情。

我最想知道从SQL Server获取该信息是使用xp_cmdshell命令从SQL执行命令提示符命令。

xp_cmdshell 'NBTSTAT -A 10.10.10.10'

此外,这样的结果就像从命令提示符那样,它需要一些解析才能从中获取确切的机器名称。请查看此主题以获取更多信息:Get Results from XP_CMDSHELL

我不知道您的解决方案架构以及如何获取IP地址,但如果它来自某些客户端应用程序,则可能更容易从客户端查询中找到执行SELECT HOST_NAME()的客户端计算机名称,或者.NET并直接发送机器名称。

答案 3 :(得分:0)

--Im using command line for checking host name after IP

declare @IP as varchar(15)

declare @cmd as varchar(1000)

set @IP='192.168.0.1'

SET @cmd = 'ping -a -n 1 ' + @IP

Create Table #Output (Output varchar(150) default(''))

INSERT INTO #Output

EXEC xp_cmdshell @cmd

Begin try

Select top 1 Replace(LEFT([Output],CHARINDEX('[', [output])-2),'Pinging ','') as HostName from #Output where Output is not null

End Try

Begin catch

Select 'Host name for:' + @IP +' could not be find'

End catch

drop table #Output

答案 4 :(得分:0)

试试这个你会得到一个系统名称.......

选择HOST_NAME()

问候:Rajsri Vyshnnavi

答案 5 :(得分:0)

DB:强>

IPAdd | MachineName

查询:强>

select MachineName from DBTable where IPAdd='yourIPAddress'

试用:

SELECT SERVERPROPERTY('MachineName')

或强>

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

或强>

SELECT @@SERVERNAME;

参见:强>

希望它有所帮助。

答案 6 :(得分:0)

这实际上有效:来自Sky Diver的修改后的答案

--Im using command line for checking host name after IP

declare @IP as varchar(15)

declare @cmd as varchar(1000)

set @IP='137.201.17.204'

SET @cmd = 'ping -a -n 1 ' + @IP

Create Table #Output (Output varchar(150) default(''))

INSERT INTO #Output

EXEC xp_cmdshell @cmd

Begin try

Select top 1 Replace(LEFT([Output],CHARINDEX('[', [Output])-2),'Pinging ','') as HostName from #Output where Output like 'Pinging%'

End Try

Begin catch

Select 'Host name for:' + @IP +' could not be find'

End catch

--drop table #Output

答案 7 :(得分:0)

您可以尝试使用此功能获取计算机的名称。

SELECT SERVERPROPERTY(N'MachineName');

可能在上面可以满足你的目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值