• 使用SQLDMO和TSQL列出所有的实例



    使用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
  • 相关阅读:
    bootstrap-select.js 下拉框多选后动态赋值
    vs2012 未找到与约束 ContractName Microsoft.VisualStudio.Utilities.IContentTy...
    jquery 报错 Uncaught TypeError: Illegal invocation
    火狐浏览器的RestClient,接口测试,Post提交数据
    destoon二次开发 操作数据库可运行示例
    ZendStudio13 PHP调试环境快速配置
    VR发展的最大障碍在于内容?
    优秀博文链接
    LoopMatrix
    串口输出float型数据
  • 原文地址:https://www.cnblogs.com/wghao/p/952239.html
Copyright © 2020-2023  润新知