ALTER PROCEDURE [dbo].[A]
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
) with seterror;
END CATCH;
END
ALTER PROCEDURE B
AS
BEGIN
SET NOCOUNT ON;
exec A
if @@error<>0
print 'error occur'
else
print 'done'
END
GO
DECLARE @RC int
EXECUTE @RC = [dbo].[B]
结果是
Msg 50000, Level 16, State 1, Procedure A, Line 24
Error raised in TRY block.
done
只有if @@error=0的时候才显示done的,为啥有了自定义的error抛出来
if @@error<>0
print 'error occur'
else
print 'done'
这个@@error还是0呢?