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 一类的,可以捕捉错误,继续往下执行
解决方案 »
- 求一SQL语句
- 关于JS调用与URL传值的问题
- 关于定时保存查询结果的问题
- 求助:提取sqlserver 2000 image字段中的中文字符显示为乱码
- 下面语句运行不能通过。
- sql server2005数据库分离后附加出错 各位前辈帮忙看下
- 盘点单的生成!急救!!!!!!!!!
- 想问下关与标点符号的问题,多谢各位了
- Varchar(可变长字符串) OpenVMS(半知半解) CrazyFor(蚂蚁) ()pengdali(大力 V2.0) () LIWSKQ(LIW) () 过来拿分
- 使用SqlBulkCopy向数据库批量插入时弹出异常“Cannot access destination table”
- 一个修改密码的存储过程!
- 高手请进来指教一下sql语句的问题,谢谢了
select 1/0
end try
begin catch
print @@error
print 'sdf'
end
2.用@error来处理
select @@ERROR消息 208,级别 16,状态 1,第 1 行
对象名 'asd' 无效。
没有显示@@ERROR
select @@ERROR消息 208,级别 16,状态 1,第 1 行
对象名 'asd' 无效。
没有显示@@ERROR
2000只能@@error判断,不过对象不存在问题估计@@error判断不了,因为直接报错退出了oracle应该有查询对象是否存在的方法,你查询后,有的才执行,不就容错了吗
如果严重的错误,SQL不会执行下去
-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)
----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;
---raiserror的用法
begin try
raiserror('生成一个错误消息',11,1)
end try
begin catch
select error_message() as 错误消息,
error_severity() as严重级别,
error_state() as state;
end catch
try
catch
只是2005多的一个处理方式
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'。*/
http://blog.csdn.net/chen_xizhang/archive/2009/06/12/4262308.aspx
oracle 里有个user_tables ,里面存有表名
我使用exec sp_addlinkedserver 登陆以后,查询user_tables,提示表不存在或权限不够,
直接使用oracle 的 SQL PLUS却可以查到,exec sp_addlinkedserver 和SQL PLUS是用同一个用户登陆的