在一个存储过程中执行另一个存储过程能得到执行后的错误号吗?
例:
create proc p1
....gocreate proc p2exec p1
if @@error --这样写能得到P1执行过程出错的信息吗?或则得在p1中建个output变量然后在p2中得到?
return
go

解决方案 »

  1.   

    是这样吗?(因为我想更简单的方法实现)
    create proc p1 @error int output as
    ...
    if @@error set @erroe=@@error
    go
    ---------
    create proc p2 as
    declare @error int
    set @error=0
    exec p1 @error output..
    go这样就OK吧?还有更简单的方法吗?
      

  2.   


    CREATE PROCEDURE Test1(@er int output )
    AS
    BEGIN
    DECLARE @num varchar
    SET @num = 123.33
    SELECT @er=@@ERROR
    END
    GOCREATE PROCEDURE test
    AS
    BEGIN
    EXEC Test1
    IF @@ERROR > 0 
    PRINT @@ERROR
    ENDEXEC test/*
    Msg 8115, Level 16, State 5, Procedure Test1, Line 5
    将 numeric 转换为数据类型 varchar 时出现算术溢出错误。
    0
    */
    --结果为零,表明不能得到的
    --如果你要得到:CREATE PROCEDURE Test2
    AS
    BEGIN
    DECLARE @er BIGINT
    EXEC Test1 @er OUTPUT
    IF @er > 0 
    PRINT @er
    END
    GO
    EXEC Test2
    /*
    Msg 8115, Level 16, State 5, Procedure Test1, Line 5
    将 numeric 转换为数据类型 varchar 时出现算术溢出错误。
    8115
    */
      

  3.   

    @error只能在错误出现时马上得到,如果你是2005用try cath 吧