use model
go
create proc send_message as begin
  create table #tspid(
spid int null,
ecid int null,
status varchar(200) null,
loginname varchar(200) null,
hostname varchar(200) null,
blk bit null,
dbname varchar(200) null,
cmd varchar(200)
  )insert into #tspid(spid,ecid,status,loginname,hostname,blk,dbname,cmd) exec sp_who create table #userip(id int identity,hostname varchar(200),txt varchar(8000))declare @cmdStr varchar(100), @hostName varchar(30), @userip varchar(20), @sendstr varchar(100)declare tspid cursor for select hostname from #tspid where spid>50
open tspid   fetch next from tspid into @hostname
   WHILE @@FETCH_STATUS = 0
   begin
create table #table (id int identity,txt varchar(8000))
select @cmdStr='ping '+@hostName
insert #table(txt) exec master..xp_cmdshell @cmdStr
insert #userip select @hostname,substring(txt,charindex('[',txt)+1,charindex(']',txt)-charindex('[',txt)-1) from #table where id=2
   fetch next from tspid into @hostname
   end select * from #userip
  drop table #tspid ,#userip
endgo--调用:
exec send_message

解决方案 »

  1.   

    /*--
    所有连接本机的计算机名,IP地址
    --*/create table #tb(id int identity(1,1),hostname nchar(128),loginname nchar(128),net_address nchar(12),net_ip nvarchar(15))
    insert into #tb(hostname,net_address,loginname)
    select distinct hostname,net_address,loginame from master..sysprocesses where hostname<>''declare @id int,@sql varchar(500)
    select @id=max(id) from #tbcreate table #ip(id int,a varchar(8000))
    while @id>0
    begin
    select @sql='ping '+hostname from #tb where id=@id
    insert #ip(a) exec master..xp_cmdshell @sql
    update #ip set id=@id where id is null
    set @id=@id-1
    endupdate #tb set net_ip=left(a,patindex('%:%',a)-1)
    from #tb a inner join (
    select id,a=substring(a,patindex('Ping statistics for %:%',a)+20,20) from #ip
    where a like 'Ping statistics for %:%') b on a.id=b.idselect * from #tbdrop table #tb,#ip
      

  2.   

    谢谢 pengdali(大力 V3.0)