none
Consulta dinamica com like RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Estou tentando fazer uma consulta dinâmica e sempre me retorna o seguinte erro:

    Mensagem 207, Nível 16, Estado 1, Procedimento _sqlBuscaProdutosPorCategoriaIdPalavraChave, Linha 25
    Nome de coluna 'palavraChave' inválido.
    Mensagem 207, Nível 16, Estado 1, Procedimento _sqlBuscaProdutosPorCategoriaIdPalavraChave, Linha 26
    Nome de coluna 'palavraChave' inválido.
    Mensagem 207, Nível 16, Estado 1, Procedimento _sqlBuscaProdutosPorCategoriaIdPalavraChave, Linha 27
    Nome de coluna 'palavraChave' inválido.

    Segue abaixo a minha procedure:

    CREATE PROCEDURE [dbo].[_sqlBuscaProdutosPorCategoriaIdPalavraChave]
    @palavraChave varchar(300),
    @categoriaId varchar(10),
    @ordenarPor varchar(200),
    @ordem varchar(5)
    AS
    declare @strSQL varchar(max)
    BEGIN
    
    	SET NOCOUNT ON;
    set @ordenarPor = 'tbProdutos.' + @ordenarPor
    set @strSQL = 'SELECT   tbProdutos.produtoId, tbProdutos.produtoPaiId, tbProdutos.produtoIdDaEmpresa, tbProdutos.produtoNome, tbProdutos.produtoUrl, tbProdutos.produtoPreco, 
               tbProdutos.produtoPrecoPromocional, tbProdutos.produtoPrecoAtacado, tbProdutos.produtoQuantidadeMininaParaAtacado, tbProdutos.produtoLegendaAtacado, 
               tbProdutos.produtoEstoqueAtual, tbProdutos.disponibilidadeEmEstoque, tbProdutos.produtoEstoqueMinimo, tbProdutos.produtoAtivo, tbProdutos.produtoFreteGratis, 
               tbProdutos.produtoLancamento, tbProdutos.preVenda, tbProdutos.produtoPromocao, tbProdutos.produtoPrincipal,
                 (SELECT   TOP (1) produtoFoto
                  FROM     tbProdutoFoto
                  WHERE   (produtoId = tbProdutos.produtoId) AND (produtoFotoDestaque = ''True'')) AS produtoFotoDestaque,
                 (SELECT   TOP (1) produtoFoto
                  FROM     tbProdutoFoto AS tbProdutoFoto_1
                  WHERE   (produtoId = tbProdutos.produtoId)) AS produtoFoto
    FROM     tbProdutos INNER JOIN
               tbJuncaoProdutoCategoria ON tbProdutos.produtoId = tbJuncaoProdutoCategoria.produtoId INNER JOIN
               tbProdutoCategoria ON tbJuncaoProdutoCategoria.categoriaId = tbProdutoCategoria.categoriaId
    WHERE   (tbProdutos.produtoAtivo = ''True'') AND (tbProdutos.produtoPrincipal = ''True'') AND (tbProdutoCategoria.categoriaId = ' + @categoriaId + ') AND ((tbProdutos.produtoNome LIKE ''%' + palavraChave + '%'') OR
               (tbProdutoCategoria.categoriaNome LIKE ''%' + palavraChave + '%'') OR
               (tbProdutos.produtoMetakeywords LIKE ''%' + palavraChave + '%'')) 
    ORDER BY ' + @ordenarPor + ' ' + @ordem + ''
    exec(@strSQL)
    END

    Algúem sabe por que aparece esse erro e não consigo criar a procedure?

    Obrigado,
    Gustavo

    sexta-feira, 1 de outubro de 2010 18:53

Respostas

  • Gustavo

    vc esqueceu o @  :)

    tenta assim

    CREATE PROCEDURE [dbo].[_sqlBuscaProdutosPorCategoriaIdPalavraChave]
    @palavraChave varchar(300),
    @categoriaId varchar(10),
    @ordenarPor varchar(200),
    @ordem varchar(5)
    AS
    declare @strSQL varchar(max)
    BEGIN
    
    	SET NOCOUNT ON;
    set @ordenarPor = 'tbProdutos.' + @ordenarPor
    set @strSQL = 'SELECT  tbProdutos.produtoId, tbProdutos.produtoPaiId, tbProdutos.produtoIdDaEmpresa, tbProdutos.produtoNome, tbProdutos.produtoUrl, tbProdutos.produtoPreco, 
          tbProdutos.produtoPrecoPromocional, tbProdutos.produtoPrecoAtacado, tbProdutos.produtoQuantidadeMininaParaAtacado, tbProdutos.produtoLegendaAtacado, 
          tbProdutos.produtoEstoqueAtual, tbProdutos.disponibilidadeEmEstoque, tbProdutos.produtoEstoqueMinimo, tbProdutos.produtoAtivo, tbProdutos.produtoFreteGratis, 
          tbProdutos.produtoLancamento, tbProdutos.preVenda, tbProdutos.produtoPromocao, tbProdutos.produtoPrincipal,
           (SELECT  TOP (1) produtoFoto
           FROM   tbProdutoFoto
           WHERE  (produtoId = tbProdutos.produtoId) AND (produtoFotoDestaque = ''True'')) AS produtoFotoDestaque,
           (SELECT  TOP (1) produtoFoto
           FROM   tbProdutoFoto AS tbProdutoFoto_1
           WHERE  (produtoId = tbProdutos.produtoId)) AS produtoFoto
    FROM   tbProdutos INNER JOIN
          tbJuncaoProdutoCategoria ON tbProdutos.produtoId = tbJuncaoProdutoCategoria.produtoId INNER JOIN
          tbProdutoCategoria ON tbJuncaoProdutoCategoria.categoriaId = tbProdutoCategoria.categoriaId
    WHERE  (tbProdutos.produtoAtivo = ''True'') AND (tbProdutos.produtoPrincipal = ''True'') AND (tbProdutoCategoria.categoriaId = ' + @categoriaId + ') AND ((tbProdutos.produtoNome LIKE ''%' + palavraChave + '%'') OR
          (tbProdutoCategoria.categoriaNome LIKE ''%' + @palavraChave + '%'') OR
          (tbProdutos.produtoMetakeywords LIKE ''%' + @palavraChave + '%'')) 
    ORDER BY ' + @ordenarPor + ' ' + @ordem + ''
    exec(@strSQL)
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba
    • Sugerido como Resposta Junior Galvão - MVPMVP sábado, 2 de outubro de 2010 00:44
    • Marcado como Resposta btguga sexta-feira, 8 de outubro de 2010 00:35
    sexta-feira, 1 de outubro de 2010 19:53
    Moderador