周广明的博客

.Net & MS SQL Tech
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

判断远程SQL Server服务器是否运行

Posted on 2008-11-26 13:33  Zhougm  阅读(1138)  评论(1)    收藏  举报
if exists(select 1 from sysobjects where id=object_id('Func_GetServerStatus'and objectproperty(id,'IsInlineFunction')=0)
 
drop function Func_GetServerStatus
go
---Miller Zhou on 2008/11/26
--
-判断远程SQL Server服务器是否运行

Create function Func_GetServerStatus
(
     
@servername varchar(50),   --服务器名
     @userid varchar(50)='sa',  --用户名,如果为nt验证方式,则为空
     @password varchar(50)=''   --密码
)
Returns nvarchar(max)
As

Begin
    
Declare @result nvarchar(max),@ire int      --返回状态
    Declare @srvid int          --定义服务器、数据库集id

    
--错误处理变量
    Declare @err int
    
Declare @source varchar(255)
    
Declare @description varchar(255)
    
--创建sqldmo对象
    Exec @err=sp_oacreate 'sqldmo.sqlserver',@srvid output
    
If @err<>0 Goto ErrorHandle

    
--连接服务器
    if isnull(@userid,'')='' --如果是 Nt验证方式
    Begin
        
Exec @err=sp_oasetproperty @srvid,'loginsecure',1
        
If @err<>0 Goto ErrorHandle

        
Exec @err=sp_oamethod @srvid,'connect',null,@servername
    
End
    
Else
    
Begin
        
Exec @err=sp_oamethod @srvid,'connect',null,@servername,@userid,@password
    
End
    
If @err<>0 Goto ErrorHandle

    
--获取服务器状态
    Exec @err=sp_oagetproperty @srvid,'Status',@ire output
    
If @err<>0 Goto ErrorHandle
 
    
--Set @result=case @ire when 0 then '未知'
    --   when 1 then '运行'
    --   when 2 then '暂停'
    --   when 3 then '停止'
    --   when 4 then '正在启动'
    --   when 5 then '正在启动停止'
    --   when 6 then '连接'
    --   when 7 then '正在暂停' end
       
    
Set @result=case @ire when 0 then 'Fail; Unknown'
       
when 1 then 'Pass; Running'
       
when 2 then 'Fail; Pause'
       
when 3 then 'Fail; Stop'
       
when 4 then 'Fail; Starting'
       
when 5 then 'Fail; Stopping'
       
when 6 then 'Fail; Connecting'
       
when 7 then 'Fail; Pausing' end
       
    
Return(@result)
    
ErrorHandle:
    
---'OLE Automation Error Information'
    EXEC @err = sp_OAGetErrorInfo NULL@source OUT, @description OUT
    
IF @err = 0
    
BEGIN
        
set @result='Fail; '+'Source: '+@source+'; Description: '+@description
    
END
    
ELSE
    
BEGIN
        
set @result='Fail; sp_OAGetErrorInfo failed.'
    
END
    
return(@result)
End

 

调用执行代码如下,

Declare @RemoteSS nvarchar(MAX)
Set @RemoteSS=''
select @RemoteSS=dbo.Func_GetServerStatus('172.26.16.4','sa','sa')
If @RemoteSS like 'Fail%'
Begin
    
Select 'Fail' as iResult,'Link Remote server fail !' as iMessgae
    
Return
End
Else
Begin
    
Select 'Pass' as iResult,'Link Remote server sucessfully !' as iMessgae
    
Return
End