使用SQLDMO和T-SQL列出所有的实例


使用SQLDMO和T - SQL列出所有的实例
--
王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com
--
原帖地址 微软报告的Bug: SQLDMO.Application对象的方法ListAvailableServers会引起0x800A000E错误。 当从ASP页面执行SQLDMO.Application对象的方法ListAvailableServers,也许会发生下面的错误消息: Microsoft SQL - DMO ( 0x800A000E ) [ SQL-DMO ] Not enough storage is available to complete this operation. 然而,有一些方法可以解决这个问题以得到实例即在ASP上使用客户端脚本。 这里有一个存储过程,我们将准备列出所有可用的实例,所以在你的Web应用程序里很容易展示它们。


CREATE   PROCEDURE  EnumerateSQLServers
AS
/*
存储过程名称: EnumerateSQLServers
作者            : Srdjan Josipovic
日期            : 2002-06-19
目的            :使用SQLDMO和TSQL列出所有可用的实例
翻译整理      :王成辉

*/

DECLARE   @retval   int
DECLARE   @result   varchar ( 500 )
DECLARE   @object   int  
DECLARE   @objectList   int  
DECLARE   @src   varchar ( 254 )
DECLARE   @desc   varchar ( 255 )
DECLARE   @resultsCount   int
DECLARE   @counter   int
DECLARE   @method   varchar ( 255 )

-- 创建SQLDMO对象
EXEC   @retval   =  sp_OACreate  ' SQLDMO.Application ' @object  OUT

-- 检查对象是否创建成功
IF   @retval   <>   0  
BEGIN
    
EXEC  sp_OAGetErrorInfo  @object @src  OUT,  @desc  OUT 
    
SELECT  hr = convert ( varbinary ( 4 ), @retval ), Source = @src , Description = @desc
    
RETURN
END
-- 调用方法ListAvailableServers() , 为SQLDMO.NameList得到Object_ID
EXEC   @retval   =  sp_OAMethod  @object  ,  ' ListAvailableSQlServers() '  ,  @objectList  OUT
--  是否有错误?
IF   @retval   <>   0  
BEGIN
    
EXEC  sp_OAGetErrorInfo  @objectList @src  OUT,  @desc  OUT 
    
SELECT  hr = convert ( varbinary ( 4 ), @retval ), Source = @src , Description = @desc
    
RETURN
END
-- 计算局域网里的服务器数量
EXEC   @retval   =  sp_OAGetProperty  @objectList  ,  ' Count '  ,  @resultsCount  OUT
-- 再一次进行错误处理
IF   @retval   <>   0  
BEGIN
    
EXEC  sp_OAGetErrorInfo  @objectList @src  OUT,  @desc  OUT 
    
SELECT  hr = convert ( varbinary ( 4 ), @retval ), Source = @src , Description = @desc
    
RETURN
END

-- 如果有服务器的话,进入处理..
IF   @resultsCount   >   0
BEGIN
  
SET   @counter   =   1
  
DECLARE   @ServersTbl   table  (ServerID  int   IDENTITY  ,ServerName  varchar ( 255 ))
  
WHILE   @counter   <=   @resultsCount
  
BEGIN
    
-- 列出SQL实例:一个名字接一个名字的列出
     SET   @method   =   ' Item( '   +   convert ( varchar ( 3 ), @counter +   ' ) '         
    
EXEC   @retval   =  sp_OAGetProperty  @objectList  , @method  ,  @result  OUT
    
    
-- 将数据存到临时表
     INSERT   INTO   @ServersTbl  (ServerName)  SELECT   @result
    
    
-- 移到下一条记录
     SET   @counter   =   @counter   +   1
  
END
END
ELSE
BEGIN
  
SET   @result   =   ' No Servers around you '
  
INSERT   INTO   @ServersTbl  (ServerName)  SELECT   @result
END
-- 释放对象
EXEC   @retval   =  sp_OADestroy  @object
IF   @retval   <>   0
BEGIN
  
EXEC  sp_OAGetErrorInfo  @object @src  OUT,  @desc  OUT 
  
SELECT  hr = convert ( varbinary ( 4 ), @retval ), Source = @src , Description = @desc
  
RETURN
END

-- 好了,可以列出所有可用的实例了 .
SELECT   *   FROM   @ServersTbl
GO

http://topic.csdn.net/u/20071107/12/76f7f073-6acc-470b-be80-dff71d583923.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值