【问题标题】:Function to return ip address based on computer name T-SQL根据计算机名称返回 ip 地址的函数 T-SQL
【发布时间】:2019-03-16 10:53:09
【问题描述】:

我在 sql server 中有一个表,其中包含域中的计算机列表。它有一个名为FQDN 的列,其中包含计算机的名称。我为 IP 添加了一列nvarchar(稍后我将对其进行格式化)。我想知道是否可以创建一个函数来根据名称列中的名称从 dns 中获取它们,而不是手动填充 ip。例如,在 powershell 中,如果我输入 [System.Net.Dns]::GetHostAddresses("yourhosthere").ipaddresstostring 并将其存储在一个变量中,我就会得到我想要的。我无法将上述 powershell 嵌入到 sql server 中的函数中,然后遍历 name 列以更新 ip 列。我当然尝试了EXEC xp_cmdshellpowerhell.exe,但无济于事。

【问题讨论】:

  • 这可能是应该在客户端或ETL工具上完成的。您输入的不是 Powershell,而是 .NET 调用。您可以通过 SQLCLR 使用同一行。解析未知地址可能需要长达 15 秒,这就是为什么最好在客户端上运行此类代码
  • 我可以使用这个 exec master..xp_cmdshell 'nslookup servername'。它工作正常,但我不知道如何从中提取 ip。我不能使用 connectionproperty 函数,因为它不是活动连接,它只是表中的一个字符串
  • 您需要将这些IP信息存储到什么目的?这似乎是你完成后很容易过时的那种东西。
  • 我同意这些 ip 可以更改(尽管它们是固定的 dns 记录)直接的答案是“管理”发送了库存表的列名列表:)
  • 您必须从 SQL Server 端执行,还是可以执行客户端脚本(类似于 Powershell)?

标签: sql .net sql-server powershell tsql


【解决方案1】:

这将为您提供 IP 地址。

 SELECT CONNECTIONPROPERTY('local_net_address') AS local_net_address

或者,

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

【讨论】:

  • 我不能使用 connectionproperty 函数,因为它不是活动连接,它只是表中的一个字符串
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 2011-06-07
  • 2015-05-16
相关资源
最近更新 更多