if exists (Select * From sysobjects where Name = 'A_Test')  Drop Table A_Test
if exists (Select * From sysobjects where Name = 'SP_Test') Drop Procedure SP_Test
GO
Create Table A_Test 
  (F1 VarChar(20), 
   F2 VarChar(100), 
   LogDate DateTime)
GO
Create Procedure SP_Test As
BEGIN
  Declare @ErrCode integer, @SQL NVarChar(512)  Insert Into A_Test (F1, F2, LogDate) Select 1/0, 'F2', GetDate()
  --上面一句会报错,我们任然需要执行下面的语句
  Select @ErrCode = @@ERROR  
  Insert Into A_Test (F1, F2, LogDate) Select '执行到这里了', '第一步会报错 Error=' + Convert(VarChar(10), @ErrCode), GetDate()
  --SELECT 'HN',   *, GetDate() FROM OPENROWSET('SQLOLEDB','babybearzb.dyndns.biz,1533';'sa';'wobugaosuni', 'Select Top 1 * From IV_BizDB.dbo.Sys_Depart')
  Select @SQL = 'SELECT ''HN'',   *, GetDate() FROM OPENROWSET(''SQLOLEDB'',''babybearzb.dyndns.biz,1533'';''sa'';''wobugaosuni'', ''Select Top 1 * From IV_BizDB.dbo.Sys_Depart'')'
  Exec sp_executesql @SQL
  Select @ErrCode = @@ERROR  
  Insert Into A_Test (F1, F2, LogDate) Select '执行到这里了', '第二步会报错 Error=' + Convert(VarChar(10), @ErrCode), GetDate()
END/*
执行完毕 Exec SP_Test 后
Select * From A_Test中必须有2条记录
Exec SP_Test
Select * From A_Test
目前没有第二条记录,只有一条记录
*/向高手求助,为什么第二条错误记录没有插入到a_test中来?

解决方案 »

  1.   

    第2次执行次存储过程报出一下信息:
    消息 8134,级别 16,状态 1,过程 SP_Test,第 3 行
    遇到以零作除数错误。
    语句已终止。(1 行受影响)
    链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "登录超时已过期"。
    链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "建立到服务器的连接时发生错误。连接到 SQL Server 2005 时,默认设置 SQL Server 不允许远程连接这个事实可能会导致失败。"。
    消息 11004,级别 16,状态 1,第 0 行
    TCP 提供程序: 请求的名称有效,但是找不到请求的类型的数据。
      

  2.   

    第二句的@@ERROR是 babybearzb.dyndns.biz 返回的错误,由于连接未成功
    你可以只执行 第2句 看看  
    SELECT 'HN', *, GetDate() FROM OPENROWSET('SQLOLEDB','babybearzb.dyndns.biz,1533';'sa';'wobugaosuni', 'Select Top 1 * From IV_BizDB.dbo.Sys_Depart')
    Select @@ERROR再执行第一句的
    Insert Into A_Test (F1, F2, LogDate) Select 1/0, 'F2', GetDate()  
    Select @@ERROR   
      

  3.   

    SELECT 'HN', *, GetDate() FROM OPENROWSET('SQLOLEDB','babybearzb.dyndns.biz,1533';'sa';'wobugaosuni', 'Select Top 1 * From IV_BizDB.dbo.Sys_Depart')
    Select @@ERROR执行返回:
    链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "登录超时已过期"。
    链接服务器"(null)"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "建立到服务器的连接时发生错误。连接到 SQL Server 2005 时,默认设置 SQL Server 不允许远程连接这个事实可能会导致失败。"。
    消息 11004,级别 16,状态 1,第 0 行
    TCP 提供程序: 请求的名称有效,但是找不到请求的类型的数据。我的目的是如何把连接不成功的错误消息11004插入到a_test表中呢?
    现在的情况是SQL2005直接报错就终止了.
      

  4.   

    declare @Err integer
    select 1/0
    select @Err=@@ERROR
    insert into    a_test (F1, F2, LogDate) select '111',Convert(VarChar(10), @Err), GetDate()
    select * from a_test这个执行可以把错误信息插入到表中
    但:
    declare @Err integer
    SELECT 'HN', *, GetDate() FROM OPENROWSET('SQLOLEDB','babybearzb.dyndns.biz,1533';'sa';'wobugaosuni', 'Select Top 1 * From IV_BizDB.dbo.Sys_Depart')
    select @Err=@@ERROR
    insert into    a_test (F1, F2, LogDate) select '111',Convert(VarChar(10), @Err), GetDate()
    执行这个弹出错误信息,就不执行插入操作了。请问高手该怎么解决啊?或者有别的什么好的办法么?
      

  5.   


     Select @SQL = 'SELECT ''HN'', *, GetDate() FROM OPENROWSET(''SQLOLEDB'',''babybearzb.dyndns.biz,1533'';''sa'';''wobugaosuni'', ''Select Top 1 * From IV_BizDB.dbo.Sys_Depart'')'
      Exec sp_executesql @SQL
    改为
    select @sql='SELECT' +'"'+'HN'+'"' +…………
    否则 @sql 不是可执行的sql语句