此过程是为了返回本机IP地址,但有的返回空值,不知为什么?

sailor_2000 2006-02-28 11:24:08
create PROCEDURE dbo.GetLocalIP @IPHZH varchar(30) output AS

set xact_abort on
begin

create table #ip(id int identity(1,1),re varchar(2000))

declare @s varchar(1000),@pos int
set @s = 'ping ' + host_name() + ' -a -n 1 -l 1'
insert #ip(re) exec master..xp_cmdshell @s

select @IPHZH=stuff(left(re,charindex(']',re)-1),1,charindex('[',re),'') from #ip where id = 2

select @pos=0
while 1=1
begin
select @IPHZH=substring(@IPHZH,PATINDEX('%.%',@IPHZH)+1,len(@IPHZH)-PATINDEX('%.%',@IPHZH))
if @pos>0 break
select @pos=@pos+1
end
select @IPHZH='_'+STUFF(@IPHZH, PATINDEX('%.%',@IPHZH), 1, '_')

drop table #ip
end
...全文
54 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zlp321002 2006-02-28
--你是不是截取IP地址字符串有问题。
--你用下邹建的试试

declare @ip varchar(15),@sql varchar(1000)

--得到ip地址
create table #ip(a varchar(200))
set @sql='ping '+host_name()+' -a -n 1 -l 1'
insert into #ip exec master..xp_cmdshell @sql

select @ip=left(a,patindex('%:%',a)-1) from(
select a=substring(a,patindex('Ping statistics for %:%',a)+20,20)
from #ip where a like 'Ping statistics for %:%') a

--显示结果
select 用户计算机名=host_name(),ip地址=@ip

drop table #ip
回复
子陌红尘 2006-02-28
可能性比较多,比如服务器禁止了被PING的功能
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-02-28 11:24
社区公告
暂无公告