我有一個列表中包含一列IP地址。我希望能夠執行DNS查找以返回每個IP地址的主機名。例如,給出8.8.8.8,返回'google-public-dns-a.google.com'。我正在嘗試編寫一個利用xp_cmdshell調用「NSLOOKUP」的函數。這是我迄今爲止..在SQL Server中的DNS查找
create function dbo.dns_lookup
(
@ip varchar(16)
)
returns varchar(200)
as
begin
declare @cmd nvarchar(200) = 'NSLOOKUP ' + @ip
declare @tmp table (n varchar(max))
insert @tmp
exec master.dbo.xp_cmdshell @cmd
return(
select ltrim(replace(n,'Name:',''))
from @tmp
where n like 'Name:%'
)
end
我理想的使用情況是沿着線的東西...
select row_id, ip_address, dbo.dns_lookup(ip_address)
from my_table
當然,我得到一個「無效使用的副作用在一個函數中影響運算符'INSERT EXEC''。錯誤提示我無法在函數中真正擁有EXEC。我想我可能能夠將EXEC包裝在OPENQUERY中,但是,我無法提供IP地址作爲參數。
也許我從錯誤的角度來看這件事,我相信有更好的方法來達到同樣的結果。有任何想法嗎?
謝謝。
我在過去使用xp_cmdshell做了這樣的事情,但我真的建議使用SQL/CLR。 – Ben