none
duvida com stored procedure RRS feed

  • Pergunta

  • Galera é o seguinte estou com uma duvida em relação ao retorno de erro para aplicação com stored procedure. Quando eu coloco essa [sp]

    @nome varchar(50),
    @quantidade int
    AS
    	
    	BEGIN
    	BEGIN TRY	
    	 SELECT 1/0;
        END TRY
        BEGIN CATCH 
          SELECT ERROR_MESSAGE() AS RETORNO;
         END CATCH
    
    END

    Ele não retorna erro para aplicação. Mas com essa

    @nome varchar(50),
    @quantidade int
    AS
    	
    	
    	 SELECT 1/0;
        
          SELECT ERROR_MESSAGE() AS RETORNO;
        
    END

    Ele retorna um erro para aplicação certinho. Minha duvida é o seguinte, existe possibilidade de usar o try catch e retornar um erro na aplicação, caso ocorra?

    Valeu Galera!!!


    __________________________________________________________________________________________________________ Atenciosamente, Mike Rodrigues De Lima.

    sábado, 22 de novembro de 2014 13:06

Todas as Respostas

  • Amigo,

    Você já deu uma olhada nesse link http://msdn.microsoft.com/en-us/library/ms175976.aspx.

    Testei o código abaixo e tive o retorno esperado na aplicação:

    -- Verify that the stored procedure does not already exist.
    IF OBJECT_ID ( 'usp_GetErrorInfo', 'P' ) IS NOT NULL 
        DROP PROCEDURE usp_GetErrorInfo;
    GO
    
    -- Create procedure to retrieve error information.
    CREATE PROCEDURE usp_GetErrorInfo
    AS
    SELECT
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage;
    GO
    
    BEGIN TRY
        -- Generate divide-by-zero error.
        SELECT 1/0;
    END TRY
    BEGIN CATCH
        -- Execute error retrieval routine.
        EXECUTE usp_GetErrorInfo;
    END CATCH; 

    Outro exemplo:

    CREATE PROCEDURE uspTryCatchTest
    AS
    BEGIN TRY
        SELECT 1/0
    END TRY
    BEGIN CATCH
        SELECT ERROR_NUMBER() AS ErrorNumber
         ,ERROR_SEVERITY() AS ErrorSeverity
         ,ERROR_STATE() AS ErrorState
         ,ERROR_PROCEDURE() AS ErrorProcedure
         ,ERROR_LINE() AS ErrorLine
         ,ERROR_MESSAGE() AS ErrorMessage;
    END CATCH

    Espero ter ajudado e boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"


    • Editado Lucas Vandor domingo, 23 de novembro de 2014 19:54
    domingo, 23 de novembro de 2014 19:51
  • @Mike Lima,

    Alguma novidade? 

    O post do colega @Lucas Vandor te ajudou? Não esqueça de marcar o post que te ajudou para fechar a thread. Assim deixamos o fórum mais organizado e podemos ajudar alguém que venha a ter um problema similar ao seu no futuro a encontrar a solução :).

    Caso não tenha resolvido ainda, poste mais informações sobre ele :)

    Até mais,


    TP.


    Thiago Patrocinio

    segunda-feira, 24 de novembro de 2014 00:30
  • Bom dia Mike,

    É possível utilizar o TRY...CATCH no SQL sim, com possibilidade de customizar o retorno do erro também. Veja o link abaixo.

    http://smcode.com.br/TratErroSql.aspx

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    segunda-feira, 24 de novembro de 2014 10:02