none
IF/ELSE ANINHADO RRS feed

  • Pergunta

  • Boa tarde galera,

    Primeiramente desejo a todos um feliz natal!

    Preciso saber o que está dando de errado neste IF (Procedure):

    CREATE PROCEDURE [dbo].[P_GET_LISTA_TABELA_GERAL] 
    @SQL_PESQUISA NVARCHAR(MAX), @TABELA NVARCHAR(30), @CAMPOS NVARCHAR(MAX), @CONDICAO NVARCHAR(MAX), @ORDENACAO NVARCHAR(MAX)
    AS              
    BEGIN

    DECLARE @SQL NVARCHAR(MAX)

    IF @SQL_PESQUISA = ''
    BEGIN
    SET @SQL = 'SELECT '+ @CAMPOS + ' FROM '+ @TABELA

    IF @CONDICAO <> '' 
    SET @CONDICAO = 'WHERE '+ @CONDICAO 
    ELSE
    SET @CONDICAO = ''
    END

    IF @ORDENACAO <> ''
    SET @ORDENACAO = 'ORDER BY '+ @ORDENACAO
    ELSE
    SET @ORDENACAO = ''
    END
    END
    ELSE
    BEGIN
    SET @SQL = @SQL_PESQUISA
    END

    EXEC (@SQL)

    END

    Grato desde já.

    segunda-feira, 24 de dezembro de 2012 17:26

Respostas

  • Resolvi, mesmo assim muito obrigado galera!!

    Minha solução:

    CREATE PROCEDURE [dbo].[P_GET_LISTA_TABELA_GERAL] 
    @SQL_PESQUISA NVARCHAR(MAX), @TABELA NVARCHAR(30), @CAMPOS NVARCHAR(MAX), @CONDICAO NVARCHAR(MAX), @ORDENACAO NVARCHAR(MAX)
    AS              
    BEGIN

    DECLARE @SQL NVARCHAR(MAX)

    IF @SQL_PESQUISA <> ''
    SET @SQL = @SQL_PESQUISA
    ELSE
    BEGIN
    IF @CONDICAO <> '' 
    SET @CONDICAO = ' WHERE '+ @CONDICAO 
    ELSE
    BEGIN
    SET @CONDICAO = ''
    END

    IF @ORDENACAO <> ''
    SET @ORDENACAO = ' ORDER BY '+ @ORDENACAO
    ELSE
    BEGIN
    SET @ORDENACAO = ''
    END

    SET @SQL = 'SELECT '+ @CAMPOS + ' FROM '+ @TABELA + @CONDICAO + @ORDENACAO
    END

    EXEC (@SQL)

    END

    Caso tenham outros métodos melhores que esse que passei, fico no aguardo.

    Abraços !!

    segunda-feira, 24 de dezembro de 2012 18:10

Todas as Respostas

  • Resolvi, mesmo assim muito obrigado galera!!

    Minha solução:

    CREATE PROCEDURE [dbo].[P_GET_LISTA_TABELA_GERAL] 
    @SQL_PESQUISA NVARCHAR(MAX), @TABELA NVARCHAR(30), @CAMPOS NVARCHAR(MAX), @CONDICAO NVARCHAR(MAX), @ORDENACAO NVARCHAR(MAX)
    AS              
    BEGIN

    DECLARE @SQL NVARCHAR(MAX)

    IF @SQL_PESQUISA <> ''
    SET @SQL = @SQL_PESQUISA
    ELSE
    BEGIN
    IF @CONDICAO <> '' 
    SET @CONDICAO = ' WHERE '+ @CONDICAO 
    ELSE
    BEGIN
    SET @CONDICAO = ''
    END

    IF @ORDENACAO <> ''
    SET @ORDENACAO = ' ORDER BY '+ @ORDENACAO
    ELSE
    BEGIN
    SET @ORDENACAO = ''
    END

    SET @SQL = 'SELECT '+ @CAMPOS + ' FROM '+ @TABELA + @CONDICAO + @ORDENACAO
    END

    EXEC (@SQL)

    END

    Caso tenham outros métodos melhores que esse que passei, fico no aguardo.

    Abraços !!

    segunda-feira, 24 de dezembro de 2012 18:10
  • Estudando SQL Server descobrir que essa não é a melhor forma de fazer uma procedure com sql dinâmico. Ignorem este meu exemplo assim.
    quarta-feira, 27 de novembro de 2013 12:53