none
Tratamento de retorno de select RRS feed

  • Pergunta

  • Seguinte, tenho uma procedure que tem alguns parametros de entrada.

    OK, funciona corretamente, porém se nao houver registros de retorno aparece a mensagem de "The command(s) completed sucessfully"

    Tem como eu tratar essa informação para trazer uma coluna escrito dentro, por  exemplo: "Sem registros"?

    Abs


    Edilson Lima - MCP WINXP Professional
    terça-feira, 30 de março de 2010 16:06

Respostas

  • Boa Tarde,

    Embora seja possível o ideal mesmo seria utilizar um parâmetro de saída para que sua aplicação fosse informada da ausência de linhas. Retornar múltiplas estruturas de resultset não costuma ser um boa prática. Ex:

    CREATE PROCEDURE uspRecuperaObjetos
     @Tipo CHAR(1),
     @TotalRegistros INT OUTPUT
    AS
     IF EXISTS (SELECT * FROM sys.objects WHERE type = @Tipo)
     SELECT * FROM sys.objects
     WHERE type = @Tipo
     SET @TotalRegistros = @@ROWCOUNT
    GO
    -- ResultSet com registros
    DECLARE @qtdReg INT
    EXEC uspRecuperaObjetos @Tipo = 'S', @TotalRegistros = @qtdReg OUTPUT
    IF @qtdReg = 0
     SELECT 'Não há registros'
     
    -- ResultSet sem registros
    DECLARE @qtdReg INT
    EXEC uspRecuperaObjetos @Tipo = 'Z', @TotalRegistros = @qtdReg OUTPUT
    IF @qtdReg = 0
     SELECT 'Não há registros' As MSG

    Naturalmente que o uso do OUTPUT não será feito dessa forma. Sua aplicação deve ter as APIs para capturar esse tipo de retorno. Caso essa implementação não agrade, pode tentar a seguinte (não recomendável):

    ALTER PROCEDURE uspRecuperaObjetos
     @Tipo CHAR(1)
    AS
     IF EXISTS (SELECT * FROM sys.objects WHERE type = @Tipo)
     SELECT * FROM sys.objects
     WHERE type = @Tipo
     ELSE
     
     SELECT 'Não há registros' As MSG
    GO
    -- ResultSet com registros
    EXEC uspRecuperaObjetos @Tipo = 'S'
     
    -- ResultSet sem registros
    EXEC uspRecuperaObjetos @Tipo = 'Z'

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como importar dados a partir de uma range de células de uma planilha excel ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!996.entry


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 30 de março de 2010 16:22
    • Marcado como Resposta Edilson Lima terça-feira, 30 de março de 2010 16:30
    terça-feira, 30 de março de 2010 16:19

Todas as Respostas

  • Boa Tarde,

    Embora seja possível o ideal mesmo seria utilizar um parâmetro de saída para que sua aplicação fosse informada da ausência de linhas. Retornar múltiplas estruturas de resultset não costuma ser um boa prática. Ex:

    CREATE PROCEDURE uspRecuperaObjetos
     @Tipo CHAR(1),
     @TotalRegistros INT OUTPUT
    AS
     IF EXISTS (SELECT * FROM sys.objects WHERE type = @Tipo)
     SELECT * FROM sys.objects
     WHERE type = @Tipo
     SET @TotalRegistros = @@ROWCOUNT
    GO
    -- ResultSet com registros
    DECLARE @qtdReg INT
    EXEC uspRecuperaObjetos @Tipo = 'S', @TotalRegistros = @qtdReg OUTPUT
    IF @qtdReg = 0
     SELECT 'Não há registros'
     
    -- ResultSet sem registros
    DECLARE @qtdReg INT
    EXEC uspRecuperaObjetos @Tipo = 'Z', @TotalRegistros = @qtdReg OUTPUT
    IF @qtdReg = 0
     SELECT 'Não há registros' As MSG

    Naturalmente que o uso do OUTPUT não será feito dessa forma. Sua aplicação deve ter as APIs para capturar esse tipo de retorno. Caso essa implementação não agrade, pode tentar a seguinte (não recomendável):

    ALTER PROCEDURE uspRecuperaObjetos
     @Tipo CHAR(1)
    AS
     IF EXISTS (SELECT * FROM sys.objects WHERE type = @Tipo)
     SELECT * FROM sys.objects
     WHERE type = @Tipo
     ELSE
     
     SELECT 'Não há registros' As MSG
    GO
    -- ResultSet com registros
    EXEC uspRecuperaObjetos @Tipo = 'S'
     
    -- ResultSet sem registros
    EXEC uspRecuperaObjetos @Tipo = 'Z'

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como importar dados a partir de uma range de células de uma planilha excel ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!996.entry


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 30 de março de 2010 16:22
    • Marcado como Resposta Edilson Lima terça-feira, 30 de março de 2010 16:30
    terça-feira, 30 de março de 2010 16:19
  • Gustavo, muito obrigado pelo retorno.

    Vou efetuar uns testes e bolar uma solução.

    Att,

     

    Edilson


    Edilson Lima - MCP WINXP Professional
    terça-feira, 30 de março de 2010 16:32