举个例子
--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.   

    if @@error<>0
      insert into DBC.dbo.BB (ADate,SysAdjNo) values('2008-06-14','321231') 
      

  2.   

    try..catch...
    2005、2008中才能用
      

  3.   


    sql语句应该没有问题,不明白你的意思
      

  4.   

    DBC 这个数据库在本机还是在LP链接服务器上呢?
      

  5.   

    exec sp_addlinkedserver 'lq','','SQLOLEDB','192.168.0.100'
    exec sp_addlinkedsrvlogin 'lq','false',null,'sa','' 键完就会保留,不会消失,怎么会报错哦
      

  6.   

    2005以上版本使用
    begin try
    ....
    end try
    begin catch
    .....
    end catch处理异常。
      

  7.   

    我使用的是SqlServer 2000  
    如果最开始不执行 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 这个也试过还是会出错
      

  8.   


    begin try
    --向远程数据库写数据SQL
    end trybegin catch
    --数据保存在本地SQL
    end catch
      

  9.   

    不知道sqlserver2000是否支持
    begin try
        --向远程数据库写数据SQL
    end trybegin catch
        --数据保存在本地SQL
    end catch
    试了一下好像不行哦
      

  10.   

    sqlserver2000要是你想捕获错误信息的话.你只有使用@@error变量.
      

  11.   

    2000不支持try,只能if @@error <>0 了
    如:
    begin
    select 123/0--向远程数据库写数据SQL
    endif @@error<>0
    begin
    select 'error occurs!'--数据保存在本地SQL 
    end
      

  12.   

    使用楼上的方法测试过好像还是有点问题
    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'
    而不是我想要的 --插入到远程数据库 失败后 将数据插入到本地数据库
      

  13.   

    因为发生了致命错误,下面语句不再运行。例如,试图使用一个表或不存在的列会导致发生致命错误,你的这个也是致命错误,但可以转而等价转化为两个存储过程实现,例如:
    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) )单独写个存储过程,在这里调用
      

  14.   

    BEGIN TRY
        -- 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