举个例子
--1:
exec sp_addlinkedserver 'lq','','SQLOLEDB','192.168.0.100'
exec sp_addlinkedsrvlogin 'lq','false',null,'sa',''
go
先链接上服务器再进行insert
--2:
insert lq.DBA.dbo.AA (ADate,SysAdjNo) values('2008-06-14','321231')
go
执行成功如果不执行链接服务器的语句直接执行insert语句就会提示错误
有没有什么办法使它不提示错误而是执行另外一句话:insert into DBC.dbo.BB (ADate,SysAdjNo) values('2008-06-14','321231')
--1:
exec sp_addlinkedserver 'lq','','SQLOLEDB','192.168.0.100'
exec sp_addlinkedsrvlogin 'lq','false',null,'sa',''
go
先链接上服务器再进行insert
--2:
insert lq.DBA.dbo.AA (ADate,SysAdjNo) values('2008-06-14','321231')
go
执行成功如果不执行链接服务器的语句直接执行insert语句就会提示错误
有没有什么办法使它不提示错误而是执行另外一句话:insert into DBC.dbo.BB (ADate,SysAdjNo) values('2008-06-14','321231')
insert into DBC.dbo.BB (ADate,SysAdjNo) values('2008-06-14','321231')
2005、2008中才能用
sql语句应该没有问题,不明白你的意思
exec sp_addlinkedsrvlogin 'lq','false',null,'sa','' 键完就会保留,不会消失,怎么会报错哦
begin try
....
end try
begin catch
.....
end catch处理异常。
如果最开始不执行 exec sp_addlinkedserver 'lq','','SQLOLEDB','192.168.0.100'
exec sp_addlinkedsrvlogin 'lq','false',null,'sa',''
那么insert 就会出错,而我并不想让这个错误窗口弹出来而是直接就执行 insert into DBC.dbo.BB (ADate,SysAdjNo) values('2008-06-14','321231')
DBA是远程主机上的数据库 DBC是本地上的数据库----if @@error <>0 这个也试过还是会出错
begin try
--向远程数据库写数据SQL
end trybegin catch
--数据保存在本地SQL
end catch
begin try
--向远程数据库写数据SQL
end trybegin catch
--数据保存在本地SQL
end catch
试了一下好像不行哦
如:
begin
select 123/0--向远程数据库写数据SQL
endif @@error<>0
begin
select 'error occurs!'--数据保存在本地SQL
end
CREATE PROCEDURE insertpro
@SYSADJNO bigint ,
@C TinyInt
AS
Begin
if @C=1
begin
print '0'
set xact_abort ON
BEGIN DISTRIBUTED TRANSACTION T_IAdjstock
print '1'
insert lq.DBA.dbo.AA (SysAdjNo) values (@SysAdjNo) --插入到远程数据库
print '2'
Commit Tran
if @@error<>0
begin
print '3'
insert into DBC.dbo.BB (SysAdjNo) values (@SysAdjNo) --插入到本地数据库 print '4'
end
print '5'
end
end
GO
如果在没有链接远程数据库的情况下只会执行到“insert lq.DBA.dbo.AA (SysAdjNo) values (@SysAdjNo)”这句就停下来了
提示:在 sysservers 中未能找到服务器 'lq'
而不是我想要的 --插入到远程数据库 失败后 将数据插入到本地数据库
select * from aaaa--non-exist table
if @@error<>0--the if statement never can be accessed
select 1
else
select 0 gocreate procedure proc1
as
select * from aaaago
create proc proc2
as
begin
exec proc1--same logic with previous t-sql
if @@error<>0
select 1
else
select 0
end
go
exec proc2--can catch the error
把你的远程写入模块(insert lq.DBA.dbo.AA (SysAdjNo) values (@SysAdjNo) )单独写个存储过程,在这里调用
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO