create procedure [dbo].[YMTXPro]
as
declare @ExecSql varchar(500)
--连接到oracle数据库set @ExecSql='exec sp_addlinkedserver ''ora'',''oracle'',''msdaora'',''bssyz'''
exec(@ExecSql)
set @ExecSql='exec sp_addlinkedsrvlogin ''ora'',''false'',''sa'',''intf_ymtx'',''intf_ymtx_1203'''
exec(@ExecSql)set @ExecSql='select * into bss.dbo.bss_no_del_zjmd1 from ora..LRPT.BSS_NO_DEL_ZJMD'
exec(@ExecSql)
set @ExecSql='select * into bss.dbo.interface_ymtx1 from ora..BSSQRY.INTERFACE_YMTX_VIEW'
exec(@ExecSql)............set @ExecSql='exec sp_dropserver ''ora'',''droplogins'''
exec(@ExecSql)GO数据库SQL SERVER 2000BSS_NO_DEL_ZJMD表和INTERFACE_YMTX_VIEW视图',如果不存在执行存储过程报错退出,后面的语句也不执行了,
1.如何判断oracle库中存不存在BSS_NO_DEL_ZJMD表和 INTERFACE_YMTX_VIEW视图?
2.SQL SERVER 2000如何容错,类似try catch 一类的,可以捕捉错误,继续往下执行

解决方案 »

  1.   

    begin try 
     select 1/0 
    end try 
    begin catch 
     print @@error 
     print 'sdf' 
    end 
      

  2.   

    1. 不懂
    2.用@error来处理
      

  3.   

    @@error也没有往下执行select '1' from asd
    select  @@ERROR消息 208,级别 16,状态 1,第 1 行
    对象名 'asd' 无效。
    没有显示@@ERROR
      

  4.   

    @@error也没有往下执行select '1' from asd
    select  @@ERROR消息 208,级别 16,状态 1,第 1 行
    对象名 'asd' 无效。
    没有显示@@ERROR
      

  5.   

    2005有Try catch 
    2000只能@@error判断,不过对象不存在问题估计@@error判断不了,因为直接报错退出了oracle应该有查询对象是否存在的方法,你查询后,有的才执行,不就容错了吗
      

  6.   

    不是严重的错误,SQL会执行下去
    如果严重的错误,SQL不会执行下去
      

  7.   

    楼主可以考虑将
    -1 可以会出错的语句放到一个存储过程中
    create proc proc_name
    as
    declare @ExecSql varchar(500)
    --连接到oracle数据库
    set @ExecSql='exec sp_addlinkedserver ''ora'',''oracle'',''msdaora'',''bssyz'''
    exec(@ExecSql)
    set @ExecSql='exec sp_addlinkedsrvlogin ''ora'',''false'',''sa'',''intf_ymtx'',''intf_ymtx_1203'''
    exec(@ExecSql)
    set @ExecSql='select * into bss.dbo.bss_no_del_zjmd1 from ora..LRPT.BSS_NO_DEL_ZJMD'
    exec(@ExecSql)
    set @ExecSql='select * into bss.dbo.interface_ymtx1 from ora..BSSQRY.INTERFACE_YMTX_VIEW'
    exec(@ExecSql)
    --2 在[dbo].[YMTXPro]调用刚才的存储过程
    create procedure [dbo].[YMTXPro]
    as
     exec proc_name
     --其他语句
     set @ExecSql='exec sp_dropserver ''ora'',''droplogins'''
     exec(@ExecSql)
      

  8.   

    如果是2005,可以使用try...catch...,但是,严重级别是9以内的(这个我有点忘记了)是一遇到就整个停止,是没法捕获的
      

  9.   


    ----oracle下叛断一个对象是否存在DECLARE   
          n     INT;   
      BEGIN   
          select   count(1)     
              into   n   
              from   user_objects     
            where   object_name='YOUROBJECT';   
          IF   n>0   THEN   
              --存在   
              ...;   
          ELSE   
              --不存在   
            ...;   
          END   IF;   
      END;
      

  10.   

    2005的
    ---raiserror的用法
    begin try
      raiserror('生成一个错误消息',11,1)
    end try
    begin catch
      select error_message() as 错误消息,
             error_severity() as严重级别,
             error_state() as state;
    end catch
      

  11.   

    具体还是要看错误的严重级别
    try
    catch
    只是2005多的一个处理方式
      

  12.   

    go
    begin try
      select 1/0
    end try
    begin catch
      print N'除数不能为0'
    end catch
    go
    begin try
      select * from sssss --无法捕获的错误
    end try
    begin catch
      print N'表不存'
    end catch
    /*
    -----------(0 個資料列受到影響)除数不能为0
    訊息 208,層級 16,狀態 1,行 2
    無效的物件名稱 'sssss'。*/
      

  13.   

    此文介绍很多
    http://blog.csdn.net/chen_xizhang/archive/2009/06/12/4262308.aspx
      

  14.   

    try catch 表不存在还是捕获不到,
    oracle 里有个user_tables ,里面存有表名
    我使用exec sp_addlinkedserver   登陆以后,查询user_tables,提示表不存在或权限不够,
    直接使用oracle 的 SQL PLUS却可以查到,exec sp_addlinkedserver  和SQL PLUS是用同一个用户登陆的