none
transformar colunas em texto concatenado RRS feed

  • Pergunta

  • Me pediram para criar uma função para gerar uma (ou várias) linha(s) de insert com os seguintes parâmetros:

    Nome da tabela

    Cláusula where da tabela

    Pelo sys.columns e sys.tables eu até consegui fazer a primeira parte do insert até a cláusula VALUES e armazenar em uma variável.

    o problema é que preciso de uma maneira de pegar todos os dados das colunas e concatenar.

    SET @coluna = (select nome from #campos where id = 4)--@cont)
    set @exect = 'SELECT ' + @coluna + ' FROM ' + @tabela + ' WHERE ' + @pk + ' = 40573164'
    select @exect

    onde @coluna é a coluna vigente (como pode ser qualquer tabela, a idéia é fazer um while e pegar por id - coluna.

    Depois em @exec monto um select com a coluna vigente.

    Precisava pegar o valor da execução desse select [ exec (@exect) ] em uma variável para conseguir concatenar, porém não estou conseguindo fazer isso.

    Tentei SET @campo = exec(@exect) mas não funciona. O detalhe é que o banco é 2005.

    Qualquer ajuda será bem vinda.

    terça-feira, 22 de janeiro de 2013 16:24

Respostas

  • Fernando, veja se ajuda:

    declare @teste table (name varchar(800))
    declare @variavel varchar(800)
    
    set @variavel = 'select name from sys.syscolumns'
    
    insert into @teste
    exec(@variavel)
    
    select * from @teste


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Fernando.Jarcen terça-feira, 22 de janeiro de 2013 18:36
    terça-feira, 22 de janeiro de 2013 18:25

Todas as Respostas

  • Fernando,

    Para efetuar a execução de uma consulta em uma variável dinâmica é simples, veja se o exemplo abaixo te ajuda.

    DECLARE @EXECT VARCHAR(500)
    SET @EXECT = 'SELECT TOP 10 * FROM TAB_QUALQUER(NOLOCK)'
    
    EXEC (@EXECT)

    Abraços

    terça-feira, 22 de janeiro de 2013 18:05
  • Então Gabriel.

    Eu precisava que o resultado desse select fosse inserido em uma outra variável.

    É possível?

    terça-feira, 22 de janeiro de 2013 18:16
  • Fernando, veja se ajuda:

    declare @teste table (name varchar(800))
    declare @variavel varchar(800)
    
    set @variavel = 'select name from sys.syscolumns'
    
    insert into @teste
    exec(@variavel)
    
    select * from @teste


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Fernando.Jarcen terça-feira, 22 de janeiro de 2013 18:36
    terça-feira, 22 de janeiro de 2013 18:25
  • Já ajudou bastante Alexandre. 

    É isso mesmo que eu precisava. Valeu...

    []s

    terça-feira, 22 de janeiro de 2013 18:36