如何在存储过程中使用RAISERROR创建参数?

时间:2012-05-26 06:57:33

标签: sql-server stored-procedures out-parameters

如何在MSSQL中使用RAISERROR创建参数?

此id存储过程例如:

BEGIN TRY

//OPERATION

END TRY
BEGIN CATCH
    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT 
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE();

    -- Use RAISERROR inside the CATCH block to return error
    -- information about the original error that caused
    -- execution to jump to the CATCH block.
    RAISERROR (@ErrorMessage, -- Message text.
               @ErrorSeverity, -- Severity.
               @ErrorState -- State.
               );
END CATCH;

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可以创建一个返回错误的SP:

CREATE PROCEDURE [dbo].[mySp]
(
    @ErrorMessage NVARCHAR(4000) output = '';
    @ErrorSeverity INT output = 0;
    @ErrorState INT output = 0;
)
AS

BEGIN TRY
 -- OPERATION
END TRY
BEGIN CATCH

    SELECT 
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE();

END CATCH;

并执行SP并检查错误:

DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;

EXEC mySp (@ErrorMessage output, @ErrorSeverity output, @ErrorState output);

if len(@ErrorMessage) > 0
BEGIN
    -- an error occur
    select @ErrorMessage, @ErrorSeverity, @ErrorState;

    -- or you can use the RAISERROR
    RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
END
ELSE
BEGIN
    print 'OK';   
END