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)--将oracle数据据中的表复制到SQL SERVER
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 一类的,可以捕捉错误,继续往下执行
IF OBJECT_ID('BSS_NO_DEL_ZJMD') IS NOT NULL
一样的判断也可以利用
SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' AND NAME='BSS_NO_DEL_ZJMD'
2.写事物 用@@error判断
-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)
因为
被调用的存储过程发生严重错误时,
调用它的存储过程可以捕获错误,并可以继续执行下去