none
Testar se o SELECT retornou 0 rows na própria Stored Procedure RRS feed

  • Pergunta

  • Boa tarde a todos.

    Eu tenho esta SP:

    ALTER PROCEDURE dbo.ProximoProduto
    	@Decisao int,
    	@CategoriaAntiga int,
    	@Categoria int,
    	@ProdutoAtual int,
    
    	@Teste nvarchar(100)
    
    AS
    IF @Categoria != @CategoriaAntiga
    BEGIN
    SELECT * FROM Materiais WHERE Categoria = @Categoria ORDER BY Ordem;
    END
    
    ELSE IF @Decisao = 1
    BEGIN
    SELECT * INTO Teste FROM Materiais WHERE Categoria = @Categoria AND Ordem > (SELECT Ordem FROM Materiais WHERE IDMaterial = @ProdutoAtual) ORDER BY Ordem;
    END
    
    ELSE IF @Decisao = 2
    BEGIN
    SELECT * FROM Materiais WHERE Categoria = @Categoria AND Ordem < (SELECT Ordem FROM Materiais WHERE IDMaterial = @ProdutoAtual) ORDER BY Ordem DESC
    END
    
    RETURN

    No segundo IF, se por um acaso ele não retornar nada, gostaria de chamar uma outra SP. Como eu faço esse teste na SP acima? E como eu chamo a outra SP?

    Muito obrigado.


    • Editado ErickAlves terça-feira, 10 de julho de 2012 19:56 Erro de concordância.
    terça-feira, 10 de julho de 2012 19:55

Respostas

  • Erick,

    Para saber se o SELECT retornou alguma coisa, você pode usar o @@ROWCONT.

    Ficaria mais ou menos assim:

    ALTER PROCEDURE dbo.ProximoProduto
    	@Decisao int,
    	@CategoriaAntiga int,
    	@Categoria int,
    	@ProdutoAtual int,
    
    	@Teste nvarchar(100)
    
    AS
    IF @Categoria != @CategoriaAntiga
    BEGIN
    SELECT * FROM Materiais WHERE Categoria = @Categoria ORDER BY Ordem;
    END
    
    ELSE IF @Decisao = 1
    BEGIN
    SELECT * INTO Teste FROM Materiais WHERE Categoria = @Categoria AND Ordem > (SELECT Ordem FROM Materiais WHERE IDMaterial = @ProdutoAtual) ORDER BY Ordem
    
    IF @@ROWCOUNT = 0
      BEGIN
        EXEC sp_Teste
        RETURN --Caso queira abortar o processo
      END
    
    END
    
    ELSE IF @Decisao = 2
    BEGIN
    SELECT * FROM Materiais WHERE Categoria = @Categoria AND Ordem < (SELECT Ordem FROM Materiais WHERE IDMaterial = @ProdutoAtual) ORDER BY Ordem DESC
    END
    
    RETURN



    Vê se isso te atende.


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com

    • Sugerido como Resposta Roberson Naves terça-feira, 10 de julho de 2012 20:20
    • Marcado como Resposta ErickAlves terça-feira, 10 de julho de 2012 20:24
    terça-feira, 10 de julho de 2012 20:11

Todas as Respostas

  • Erick,

    Para saber se o SELECT retornou alguma coisa, você pode usar o @@ROWCONT.

    Ficaria mais ou menos assim:

    ALTER PROCEDURE dbo.ProximoProduto
    	@Decisao int,
    	@CategoriaAntiga int,
    	@Categoria int,
    	@ProdutoAtual int,
    
    	@Teste nvarchar(100)
    
    AS
    IF @Categoria != @CategoriaAntiga
    BEGIN
    SELECT * FROM Materiais WHERE Categoria = @Categoria ORDER BY Ordem;
    END
    
    ELSE IF @Decisao = 1
    BEGIN
    SELECT * INTO Teste FROM Materiais WHERE Categoria = @Categoria AND Ordem > (SELECT Ordem FROM Materiais WHERE IDMaterial = @ProdutoAtual) ORDER BY Ordem
    
    IF @@ROWCOUNT = 0
      BEGIN
        EXEC sp_Teste
        RETURN --Caso queira abortar o processo
      END
    
    END
    
    ELSE IF @Decisao = 2
    BEGIN
    SELECT * FROM Materiais WHERE Categoria = @Categoria AND Ordem < (SELECT Ordem FROM Materiais WHERE IDMaterial = @ProdutoAtual) ORDER BY Ordem DESC
    END
    
    RETURN



    Vê se isso te atende.


    []'s
    Philipe Souza
    E-mail: Philipe.s.souza@hotmail.com

    • Sugerido como Resposta Roberson Naves terça-feira, 10 de julho de 2012 20:20
    • Marcado como Resposta ErickAlves terça-feira, 10 de julho de 2012 20:24
    terça-feira, 10 de julho de 2012 20:11
  • Muito obrigado meu amigo. Ficou perfeito. Como estou começando a aprender ainda, as vezes falta um pouquinho de experiência. Obrigado de novo pela ajuda e atenção.
    terça-feira, 10 de julho de 2012 20:26