locked
Export de coluna text sql server 2005 RRS feed

  • Pergunta

  • Estamos tentando fazer um export de uma tabela SQL para .txt

    A tabela SQL (2005) possui a seguinte estrutura:

    cola int not null,

    colb int identity(1,1) not null,

    colc varchar(50) not null,

    cold text not null

    PK clustered composta de  cola , colb 

    Depois precisamos imoportar esse txt para uma nova tabela onde a colb passa de int para bigint

    Tentamos fazer o alter column da tabela mas devido ao volume ha um estouro na area de log e nao conseguimos concluir

    Optamos por fazer um bcp out e um bcp in mas, devido ao campo text nao estamos conseguindo exportar as linhas com as opcoes :-n (nativo do sql)

    com a opcao -c, tivemos que colocar a varias opcoes para determinar fim de coluna e linhas mas esta se tornando inviavel pois a cada exportacao aparece um caractere diferente e o processo é abortado

    Por favor, como conseguimos fazer um bcp out que contenha colunas text sem termos esses tipos de problemas?


    sexta-feira, 14 de novembro de 2014 11:40

Todas as Respostas

  • Haichu,

    Pelo que entendi a sua intenção é alterar o campo colb de int para bigint.

    Você usou a interface gráfica do Management Studio para fazer a alteração quando deu erro ?

    Se foi, tente alterar o campo por linha de comando, pois a interface gráfica internamente copia todos os dados para uma tabela temporária antes de concluir a alteração.

    Segue o código...

    alter table SuaTabela alter column colb bigint not null;



    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    sexta-feira, 14 de novembro de 2014 12:16
  • boa tarde..nao conseguimos fazer o alter table nem por interface grafica nem por comando. mesmo com opcao simple no banco de dados, a area de log cresce demasiadamente e nao conclui

    Ja tiramos o indice mas nao influenciou em nada

    O log continua crescendo em demasia.  a tabela tem 120 g deixamos 1 tb de log para base

    Detalhe.. o banco de dados esta com opcao simple

    por isso resolvemos fazer bcp out e bcp in mas sem sucesso pois da erro de data type conversion

    Grata

    sexta-feira, 14 de novembro de 2014 16:57
  • haichu1,

    Faça o seguinte então, você possui backup deste banco de dados?

    Tente realizar um DBCC ShrinkDatabase!!! 

    Estranho este crescimento descontrolada, provavelmente sua tabela também esta fragmentada, seria interessante tentar identificar o que esta forçando este crescimento.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sexta-feira, 14 de novembro de 2014 17:06
  • boa tarde..nao conseguimos fazer o alter table nem por interface grafica nem por comando. mesmo com opcao simple no banco de dados, a area de log cresce demasiadamente e nao conclui

    Ja tiramos o indice mas nao influenciou em nada

    O log continua crescendo em demasia.  a tabela tem 120 g deixamos 1 tb de log para base

    Detalhe.. o banco de dados esta com opcao simple

    por isso resolvemos fazer bcp out e bcp in mas sem sucesso pois da erro de data type conversion

    Grata

    Haichu,

    Como o Galvão falou, esta estranho o comportamento dessa sua tabela...

    Tem como você criar uma nova tabela com a mesma estrutura, trocando o tipo colb para bigint e o cold para varchar(max), e fazer o insert de todos os dados da sua tabela principal para essa nova tabela...

    Esse teste seria para verificar o crescimento do log nessa situação...


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    sexta-feira, 14 de novembro de 2014 18:02
  • Haichu1,

    Você já procurou utilizar o "Import Data..." ou "Export Data..." para mover estes dados diretamente da tabela origem para a tabela destino?

    Com estes recursos você não irá precisar converter e extrair os dados do SQL Server, preservando o conteúdo das colunas com o tipo de dados "text".

    Aproveitando, recomendo que você realize um estudo sobre a necessidade de manter estas colunas como "text" uma vez que a equipe de desenvolvimento do SQL Server já indicou que este tipo de dados não será compatível com futuras versões do produto.

    Para maiores informações veja:

    http://msdn.microsoft.com/pt-br/library/ms140052.aspx

    http://msdn.microsoft.com/pt-br/library/ms141209.aspx

    http://msdn.microsoft.com/pt-br/library/ms143729.aspx

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    sexta-feira, 14 de novembro de 2014 20:28
    Moderador
  • Nao podemos alterar a estrutura da tabela. SAbemos que o problema esta sendo ocasionado pelo campo text mas nao podemos alterar. A tabela tem 120 Gb de informacoes e nao esta fragmentada.

    O DTS / SSIS apresentou problemas tb

    DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  This means that a column that's being inserted is not the same type as the destination column AND the implicit conversion is failing.  This is usually caused when attempting to import string data into numeric or date typed columns.

    Os datatypes das tabelas origem e destino foram mantidos.. com excecao da coluna  colb que de int foi para bigint

    No bcp IN tivemos os seguintes erros reportados

    #@ Row 26141375, Column 1: Invalid character value for cast specification @#

    ø6197440               26141419               CLSQTEL 1

    #@ Row 26141881, Column 1: Invalid character value for cast specification @#

    ø6197555               26141924               CLSQTEL 1

    #@ Row 26142157, Column 1: Invalid character value for cast specification @#

    ø6197610               26142205               CLSQTEL

    Para se ter uma ideia do tamanho da tabela, o bcp out demorou 17 horas..

    Teriam outras sugestoes?




    sábado, 15 de novembro de 2014 00:57
  • Nao podemos alterar a estrutura da tabela. SAbemos que o problema esta sendo ocasionado pelo campo text mas nao podemos alterar. A tabela tem 120 Gb de informacoes e nao esta fragmentada.

    O DTS / SSIS apresentou problemas tb

    DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  This means that a column that's being inserted is not the same type as the destination column AND the implicit conversion is failing.  This is usually caused when attempting to import string data into numeric or date typed columns.

    Os datatypes das tabelas origem e destino foram mantidos.. com excecao da coluna  colb que de int foi para bigint

    No bcp IN tivemos os seguintes erros reportados

    #@ Row 26141375, Column 1: Invalid character value for cast specification @#

    ø6197440               26141419               CLSQTEL 1

    #@ Row 26141881, Column 1: Invalid character value for cast specification @#

    ø6197555               26141924               CLSQTEL 1

    #@ Row 26142157, Column 1: Invalid character value for cast specification @#

    ø6197610               26142205               CLSQTEL

    Para se ter uma ideia do tamanho da tabela, o bcp out demorou 17 horas..

    Teriam outras sugestoes?




    Haichu1,

    A quantidade de registros não deve causar problemas (além do tempo de processamento é claro). Como teste você pode também limitar a quantidade de registros que você estara migrando.

    O erro que apareceu para você é porque você não configurou para "descartar" mensagem de falha ou erro por compatibilidade de dados (que sempre vai aparecer no seu caso porque você está alterando o datatype de uma das colunas).

    Defina as opções "On Error" e "On Truncation" como "Ignore" para que o pacote possa processar todo conteúdo sem interpretar que é um erro de "quebra de compatibilidade" porque o tipo de dados é diferente.

    Veja na imagem abaixo:

    Neste caso, estou convertendo uma coluna "char" para "int", mas poderia ser de "int" para "bigint" como você pretende aplicar na coluna "colb".

    Acredite, é possível... com cem registros ou setenta milhões !!! Eu já executei um processo semelhante há "algum tempo". Neste exemplo que eu fiz para você eu inseri 8 registros.

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"

    sábado, 15 de novembro de 2014 02:06
    Moderador
  • Bom Dia

    O problema não está na conversão do int para o bigint, pois esta é implicita.

    Acreditamos que o problema esteja na coluna text pois podem existir qualquer caracteres no conteudo

    Náo estamos conseguindo colocar um field e/ou row terminator apropriado para resolver o problema

    Obrigada

    sábado, 15 de novembro de 2014 12:08
  • Deleted
    sábado, 15 de novembro de 2014 17:27