if @@error <> 0
begin
   print '出错了'
   return
end

解决方案 »

  1.   

    用if @@error >0 Goto ....跳转
      

  2.   

    @@ERROR
    返回最后执行的 Transact-SQL 语句的错误代码。语法
    @@ERROR返回类型
    integer注释
    当 Microsoft&reg; SQL Server&#8482; 完成 Transact-SQL 语句的执行时,如果语句执行成功,则 @@ERROR 设置为 0。若出现一个错误,则返回一条错误信息。@@ERROR 返回此错误信息代码,直到另一条 Transact-SQL 语句被执行。您可以在 sysmessages 系统表中查看与 @@ERROR 错误代码相关的文本信息。由于 @@ERROR 在每一条语句执行后被清除并且重置,应在语句验证后立即检查它,或将其保存到一个局部变量中以备事后查看。
      

  3.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=1675986
      

  4.   


     Transact-SQL 参考  
    @@ERROR
    返回最后执行的 Transact-SQL 语句的错误代码。语法
    @@ERROR返回类型
    integer注释
    当 Microsoft&reg; SQL Server&#8482; 完成 Transact-SQL 语句的执行时,如果语句执行成功,则 @@ERROR 设置为 0。若出现一个错误,则返回一条错误信息。@@ERROR 返回此错误信息代码,直到另一条 Transact-SQL 语句被执行。您可以在 sysmessages 系统表中查看与 @@ERROR 错误代码相关的文本信息。由于 @@ERROR 在每一条语句执行后被清除并且重置,应在语句验证后立即检查它,或将其保存到一个局部变量中以备事后查看。示例
    A.用 @@ERROR 检测一个特定错误
    下面的示例用 @@ERROR 在一个 UPDATE 语句中检测限制检查冲突(错误 #547)。USE pubs
    GO
    UPDATE authors SET au_id = '172 32 1176'
    WHERE au_id = "172-32-1176"IF @@ERROR = 547
       print "A check constraint violation occurred"B.用 @@ERROR 有条件地退出一个过程
    在此示例中,IF...ELSE 语句在存储过程中的 INSERT 语句后检测 @@ERROR。@@ERROR 变量的值将决定传给调用程序的返回值,以指示此过程的成功与失败。USE pubs
    GO-- Create the procedure.
    CREATE PROCEDURE add_author 
    @au_id varchar(11),@au_lname varchar(40),
    @au_fname varchar(20),@phone char(12),
    @address varchar(40) = NULL,@city varchar(20) = NULL,
    @state char(2) = NULL,@zip char(5) = NULL,
    @contract bit = NULL
    AS-- Execute the INSERT statement.
    INSERT INTO authors
    (au_id,  au_lname, au_fname, phone, address, 
     city, state, zip, contract) values
    (@au_id,@au_lname,@au_fname,@phone,@address,
     @city,@state,@zip,@contract)-- Test the error value.
    IF @@ERROR <> 0 
    BEGIN
       -- Return 99 to the calling program to indicate failure.
       PRINT "An error occurred loading the new author information"
       RETURN(99)
    END
    ELSE
    BEGIN
       -- Return 0 to the calling program to indicate success.
       PRINT "The new author information has been loaded"
       RETURN(0)
    END
    GOC.用 @@ERROR 检测几条语句的成功
    下面的示例取决于 INSERT 和 DELETE 语句的成功操作。局部变量在两条语句后均被设置为 @@ERROR 的值,并且用于此操作的共享错误处理例程中。USE pubs
    GO
    DECLARE @del_error int, @ins_error int
    -- Start a transaction.
    BEGIN TRAN-- Execute the DELETE statement.
    DELETE authors
    WHERE au_id = '409-56-7088'-- Set a variable to the error value for 
    -- the DELETE statement.
    SELECT @del_error = @@ERROR-- Execute the INSERT statement.
    INSERT authors
       VALUES('409-56-7008', 'Bennet', 'Abraham', '415 658-9932',
       '6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)
    -- Set a variable to the error value for 
    -- the INSERT statement.
    SELECT @ins_error = @@ERROR-- Test the error values.
    IF @del_error = 0 AND @ins_error = 0
    BEGIN
       -- Success. Commit the transaction.
       PRINT "The author information has been replaced"    
       COMMIT TRAN
    END
    ELSE
    BEGIN
       -- An error occurred. Indicate which operation(s) failed
       -- and roll back the transaction.
       IF @del_error <> 0 
          PRINT "An error occurred during execution of the DELETE 
          statement."    IF @ins_error <> 0
          PRINT "An error occurred during execution of the INSERT 
          statement."    ROLLBACK TRAN
    END
    GOD. 与 @@ROWCOUNT 一同使用 @@ERROR
    下面的示例用 @@ERROR 和 @@ROWCOUNT 验证一条 UPDATE 语句的操作。为任何可能出现的错误而检验 @@ERROR 的值,而用 @@ROWCOUNT 保证更新已成功应用于表中的某行。USE pubs
    GO
    CREATE PROCEDURE change_publisher
    @title_id tid, 
    @new_pub_id char(4) 
    AS-- Declare variables used in error checking.
    DECLARE @error_var int, @rowcount_var int-- Execute the UPDATE statement.
    UPDATE titles SET pub_id = @new_pub_id 
    WHERE title_id = @title_id -- Save the @@ERROR and @@ROWCOUNT values in local 
    -- variables before they are cleared.
    SELECT @error_var = @@ERROR, @rowcount_var = @@ROWCOUNT-- Check for errors. If an invalid @new_pub_id was specified
    -- the UPDATE statement returns a foreign-key violation error #547.
    IF @error_var <> 0
    BEGIN
       IF @error_var = 547
       BEGIN
          PRINT "ERROR: Invalid ID specified for new publisher"
          RETURN(1)
       END
       ELSE
       BEGIN
          PRINT "ERROR: Unhandled error occurred"
          RETURN(2)
       END
    END-- Check the rowcount. @rowcount_var is set to 0 
    -- if an invalid @title_id was specified.
    IF @rowcount_var = 0 
    BEGIN
       PRINT "Warning: The title_id specified is not valid"
       RETURN(1)
    END
    ELSE
    BEGIN
       PRINT "The book has been updated with the new publisher"
       RETURN(0)
    END
    GO
    请参见错误处理@@ROWCOUNTSET @local_variablesysmessages系统函数&copy;1988-2000 Microsoft Corporation。保留所有权利。
      

  5.   

    这些我都知道,但关键是,程序已经异常退出,无法执行下面的判断@error语句啊!!
    例:
    CREATE PROCEDURE up_test
    AS
    BEGIN
      SELECT Field1 FROM Table1 /*如果Field1不存在,执行到这一句就异常退出整个存储过程了*/
      IF @ERROR <> 0            /*无法执行这些语句了*/
        RETURN 1
      ELSE
        RETURN 0
    END
      

  6.   

    if @@Error<>0
     begin
      raiseerror('error',16,1)
      return
    end
      

  7.   

    SQL SERVER中的错误处理是这么牛的,没办法.
      

  8.   

    你应该好好看看这个贴子.
    http://expert.csdn.net/Expert/TopicView1.asp?id=1675986
      

  9.   

    究竟SQL Server的异常怎么对付??分布式数据库怎么访问??
    看了(大力)的帖,还是没办法解决!!
    以下是我的实例(我的主程序调用up_p1,up_p1调用up_p2):
    CREATE PROCEDURE up_p1
    AS
    BEGIN
    DECLARE @SourceIP varchar(15)
    DECLARE @SourceUser varchar(15)
    DECLARE @SourcePwd varchar(15)
    DECLARE @ret int
    DECLARE @D1 smalldatetime
    DECLARE @D2 smalldatetime

    SET @D1 = DATEADD(day,-1,GETDATE())
    SET @D2 = GETDATE()
    SET @ret = 0 DECLARE csProject CURSOR FOR
    SELECT SourceIP,SourceUser,SourcePwd FROM tbDataSource
    OPEN csProject
    --取得数据源
    FETCH NEXT FROM csProject
    INTO @SourceIP,@SourceUser,@SourcePwd
    IF @@FETCH_STATUS = 0
    BEGIN
    IF EXISTS(SELECT * FROM master.dbo.sysservers WHERE srvname = 'source')
    EXECUTE sp_dropserver 'source', 'droplogins'
    --建立连接
    EXECUTE sp_addlinkedserver
    @server = 'source',
    @srvproduct = '',
    @provider = 'SQLOLEDB',
    @datasrc = @SourceIP
    IF @@ERROR = 0
    BEGIN --登录
    EXECUTE sp_addlinkedsrvlogin 'source', 'false', NULL, @SourceUser, @SourcePwd
    if @@ERROR = 0 --执行处理过程
    EXECUTE @ret = up_p2 @D1,@D2 --由于执行up_p2异常退出整个程序,以下语句全部没执行
    ELSE
    SET @ret = 3
    END
    ELSE
    SET @ret = 2
    END
    ELSE
    SET @ret = 1 CLOSE csProject
    DEALLOCATE csProject
    /*后处理模块*/   --由于执行up_p2异常退出整个程序,无法执行这些模块
    RETURN @ret
    END--------------------------------------------------
    CREATE PROCEDURE up_p2
    @Date1 smalldatetime,
    @Date2 smalldatetime
    AS
    BEGIN
    DECLARE @sql varchar(1000)
    DECLARE @ErrorCode int
    SET @ErrorCode = 0
    -- 最初代码
    /* SELECT * FROM source.RemoteDB.dbo.tb1
    WHERE ReportTime>@Date1 AND ReportTime<=@Date2 */
    --看了(大力)的帖后改用Execute执行
    /* SET @sql = 'SELECT * FROM source.RemoteDB.dbo.tb1
    WHERE ReportTime>@Date1 AND ReportTime<=@Date2'  --这样会出现@Date1,@Date2没定义
    */
    SET @sql = 'SELECT * FROM source.RemoteDB.dbo.tb1
    WHERE ReportTime>''' + CONVERT(varchar(20),@Date1,120) + ''' AND ReportTime<=''' + CONVERT(varchar(20),@Date2,120) + ''''
    PRINT @sql
    EXECUTE(@sql) --到这里会出现"SQL Server 不存在或访问被拒绝",异常退出,无法执行下面的语句。但网络通时没事
    SET @ErrorCode = @@ERROR
    RETURN @ErrorCode
    END
      

  10.   

    想找小姐吗,来水园吧!
    这里有老龟奴zyq_123雍亲正当大版主,还有人称辣花摧魔前青楼名妓smoke当镇小版主,肯定能满足您的需要!!!快来吧~~~~~~