none
criando colunas dinâmica RRS feed

  • Pergunta

  • --pego somete a primeira linda do arquivo (cabeçalho com os nomes das colunas) e insiro da temporária
    BULK INSERT #TEMP  FROM 'C:\arquivo.txt' WITH ( FIRSTROW = 1, lastrow=1, FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', CODEPAGE = 'ACP' )

    create table #temp_colunas
    (
     coluna varchar(100)
    )

    insert into #temp_colunas (coluna)
    select name from tempdb.sys.columns where object_id = object_id('tempdb..#temp');

     

    --carrego todos os registros do arquivo, incluindo a primeira linha
    BULK INSERT #TEMP  FROM 'C:\arquivo.txt' WITH ( FIRSTROW = 1, FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', CODEPAGE = 'ACP' )

    carrego todas as informações (no segundo bulk insert), criará várias colunas. e essas colunas estão cadastradas em apenas uma coluna temporária. por exemplo

    no segundo bulk insert inseriu na #temp. se eu fizer o select na #temp traria assim:

    coluna1   coluna2   coluna3  ccoluna4
    teste     teste1    teste2   teste3 
    teste     teste1    teste2   teste3
    teste     teste1    teste2   teste3

    e na minha tabela temporária que possue as colunas... se eu der um select nela... select coluna from #temp_colunas... o resultado seria assim:

    coluna --coluna da tabela
    coluna1
    coluna2
    coluna3
    coluna4

    como eu faria para a query com o  join ou sem? de forma eu poderia fazer para trazer os registros de cada coluna?

    sexta-feira, 26 de outubro de 2012 13:24

Respostas

  • para transformar uma tabela que só tem uma coluna com registros que contem o nome das outras colunas e converte-las para colunas faça algo como do tipo:

    create table #temp2 (coluna varchar(100))
    
    insert into #temp2
    values ('Coluna1'),('Coluna2'),('Coluna3'),('Coluna4')
    
    declare @vezes int
    declare @coluna varchar(100)
    declare @sql varchar(200)
    set @vezes = (select COUNT(*) from #temp2)
    
    While @vezes > 0
    begin
    
    set @coluna = (select top 1 coluna from #temp2)
    
    set @sql = 'alter table #temp2 add ' + @coluna + ' varchar(100)'
    exec (@sql)
    
    delete from #temp2
    where coluna = @coluna
    
    set @vezes = @vezes -1
    
    if @vezes = 0
    begin
    alter table #temp2 drop column coluna
    end
    end


    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.

    • Sugerido como Resposta Alexandre Matayosi sexta-feira, 26 de outubro de 2012 15:02
    • Marcado como Resposta rafa-martin sexta-feira, 26 de outubro de 2012 16:21
    sexta-feira, 26 de outubro de 2012 15:02