none
NOVO PROBLEMA COM CONCATENAR CONSULTAS RRS feed

  • Pergunta

  •  

    SET @SQL = ''

    SET @SQL = @SQL + 'INSERT INTO #RegistrosReprogramar

    SELECT id_versao_reg,

    id_vigencia_reg_fk,

    dt_inicio_validade,

    dt_fim_validade,

    ic_ativo,

    CASE

    WHEN dt_inicio_validade <> ''' + CONVERT(VARCHAR(8),@dt_inicio_vigencia_Nova,112) + ''' THEN ''RI''

    WHEN ISNULL(dt_fim_validade,''99991231'') <> ''' + ISNULL(CONVERT(VARCHAR(8),@dt_fim_vigencia_Nova,112),99991231) + ''' THEN ''RF''

    END Reprogramar

    FROM ' + @no_fisico_entidade_versao_reg + ' (NOLOCK)

    WHERE (ISNULL(dt_fim_validade,''99991231'') >= ''' + ISNULL(CONVERT(VARCHAR(8),@dt_fim_vigencia_Nova,112),99991231) + '''

    OR dt_inicio_validade <= ''' + CONVERT(VARCHAR(8),@dt_inicio_vigencia_Nova,112) + ''')

    AND ic_ativo = ''S''

    AND id_vigencia_reg_fk = ' + CAST(@id_vigencia_reg AS VARCHAR)

    EXEC(@SQL)

     

    Caso nesse exemplo seja um selec como posso dar o return

    return EXEC(@SQL)

    quinta-feira, 6 de dezembro de 2007 19:33

Todas as Respostas

  •  

    André,

     

    Use o sp_executesql no lugar do EXEC. Veja, essa foi a resposta que dei em outro post falando sobre o sp_executesql, onde explico um pouco como usar ele:

     

    No sp_executesql vc vai ter 3 tipos de parametros... vejamos:

    EXEC sp_executesql @param1, @param2, @paramN

     

    @param1 vai ser o teu select, digamos que quer encontrar todos clientes da cidade de São Paulo e estado SP, então dentro do @param1 vai ter algo parecido com isso:

    SELECT @param1 = 'SELECT codigoPessoa, nomePessoa

    FROM Pessoas

    WHERE Localidade = @XLocalidade AND UF = @XUF'

     

    @param2 vai ser a lista de parametros que poderão aparecer dentro de @param1, exemplo:

    SELECT @param2 = '@XLocalidade VARCHAR (100), @XUF CHAR (2)'

     

    E por final, @paramN são todos parametros que poderão ser usados, no exemplo, vou usar @Localidade e @UF. Veja como fica no final:

    EXEC sp_executesql @param1, @param2, @Localidade, @UF

     

    Deve ter notado que coloquei em muito lugares "pode" e "poderão" em relação os parâmetros usados no SQL... É exatamente aí que está o segredo, você pode manter o mesmo SELECT final, modificando apenas o @param1, exemplo completo disso:

     

    SELECT @param1 = 'SELECT codigoPessoa, nomePessoa

    FROM Pessoas

    WHERE UF = @XUF'

     

    SELECT @param2 = '@XLocalidade VARCHAR (100), @XUF CHAR (2)'

     

    EXEC sp_executesql @param1, @param2, @Localidade, @UF

     

     

    Viu?? Neste caso ficou o mesmo o sp_executesql ficou exatamente igual!! O que mudou foi o conteúdo do @param1, para isso que serve aquele monte de IFs no início, pra montar o WHERE, somente com os parâmetros que foram passados com algum conteúdo.

     

     

    Bom... aqui tá link original:

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=2429784&SiteID=21

     

    Qualquer coisa, retorne aqui.

     

     

    Abraço!!!

    sexta-feira, 7 de dezembro de 2007 02:18
  • André,

     

    Você quer dar um return de dados que serão processados pelo Exec?

     

    O que você acha de criar um stored procedure?

    sexta-feira, 7 de dezembro de 2007 11:21
  • Alexandre,

     

    Desculpe-me a ignorância cara, mas vc teria um link bom aí explicando sobre o uso so sp_executesql. Cara eu já vi milhares de exemplos na net, inclusive os seus , porém ainda não consegui dominar o conceito de como usar essa proc. Sei dos milhões  de motivos para usa-la porém não gostaria de faze-la sem entender seu funcionamento e esse lance dos parâmetros..

    Cara, se puder me ajudar fico grato..

     

    Abraço,

     

    chapolin.rio@gmail.com

    sexta-feira, 7 de dezembro de 2007 12:23
  •  

    Aqui tem um muito show.

     

     

    http://www.sommarskog.se/dyn-search.html

     

     

     

    Abraço

    sexta-feira, 7 de dezembro de 2007 12:25
  • Alexandre,

     

    Você esta não TechEd?

     

    Poxa vida, vai curtir o evento, a gente da conta do recado hoje!!!

     

     

     

    sexta-feira, 7 de dezembro de 2007 12:34
  •  

    hahaha... tive que ficar no hotel mais um pouco... trabalhando, pra variar... mas estou indo pra lá agora... correndo!! hehe

     

     

    Abraço

    sexta-feira, 7 de dezembro de 2007 12:38