none
Bulk Insert com delimitador de string RRS feed

  • Pergunta

  • Possuo um arquivo CSV delimitado por "," porem existe uma coluna que é um texto livre e pode conter o caracter "," e quando isto acontece corrompe todo meu bulk insert. As colunas são todas entre aspas, por isto gostaria de saber se é possível colocar um delimitador de string.

    Por exemplo:

    "Igor",,"2","Igor, Rafael","3"

    No exemplo acima eu deveria importar da seguinte forma:

    Igor NULL 2 Igor, Rafael 3

    No entanto como a 4ª coluna possui uma "," o bulk insert fica da seguinte forma:

    "Igor" NULL "2" "Igor Rafael","3"

    Existe alguma forma de delimitar a string com aspas?


    Igor Auler

    quarta-feira, 22 de agosto de 2012 14:41

Respostas

  • Mas você não consegue este arquivo sem aspas não?

    Você ainda não me respondeu, rs: quando você abre este csv no Excel ele vem certinho? Ou os textos também ficam com as aspas?

    Se ficar certinho, exporte-o com o seguinte delimitador: ;;;;;

    Cinco ";".

    Com isso, entre cada coluna existirão 5 ";".

    Ao importar no SQL você também informa que o delimitador são 5 ";".

    Não acredito que existirá um texto em alguma coluna que possuam estes caracteres em sequencia.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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 Ricardo Russo terça-feira, 15 de janeiro de 2013 12:51
    sexta-feira, 24 de agosto de 2012 19:45
    Moderador

Todas as Respostas

  • Se você abrir este arquivo no Excel, por exemplo, ele abre certinho?

    Se ele abrir corretamente, por que você não o exporta novamente com outro delimitador de campos?


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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.

    quarta-feira, 22 de agosto de 2012 14:55
    Moderador
  • Nossa que bagunça rssss, te aconselho a fazer a separação pelo delimitador pipe ( | ),  efetue o tratamento do arquivo com delimitadores pipe e depois seta o FIELDTERMINATOR=|, mas se quiser fazer com aspas também.

    [ ]'s

    quarta-feira, 22 de agosto de 2012 15:00
  • Porque existe um campo de texto livre e qualquer delimitador q eu coloque pode acontecer este erro. A única forma  (que eu vejo) de resolver isto seria fazer com q o bulk não levasse em consideração o delimitador que está entre aspas.

    Igor Auler

    quarta-feira, 22 de agosto de 2012 15:01
  • Mas você consegue exportar com outro delimitador? Porque se conseguir você pode usar um conjunto de delimitadores que tornará praticamente impossível existir num campo texto.

    Seu delimitador na exportação pode ser, por exemplo: ![?{

    Esses 4 caracteres juntos seriam seu "delimitador". A probabilidade de existir estes mesmos caracteres, em sequencia, num campo texto é mínima.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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.

    quarta-feira, 22 de agosto de 2012 16:50
    Moderador
  • Igor,

    Como você esta realizando a exportação dos dados?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 22 de agosto de 2012 18:19
  • Junior, a galera de infra que exporta esses dados e me passa um CSV. O problema é que existe um campo, que é o nome do documento, que pode conter qualquer caracter fazendo assim com que o bulk insert se perca caso o delimitador seja encontrado dentro desta string!

    Porem todos os campos, quando não estão vazios, estão entre aspas ("") o que me facilitaria caso eu conseguisse setar um delimitador de string (isso é possível no excel, não é possível que eu não consiga fazer isto no SQL Server) !


    Igor Auler

    quarta-feira, 22 de agosto de 2012 18:45
  • Mas você consegue exportar com outro delimitador? Porque se conseguir você pode usar um conjunto de delimitadores que tornará praticamente impossível existir num campo texto.

    Seu delimitador na exportação pode ser, por exemplo: ![?{

    Esses 4 caracteres juntos seriam seu "delimitador". A probabilidade de existir estes mesmos caracteres, em sequencia, num campo texto é mínima.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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.

    Testou abrindo no Excel e exportando novamente com um delimitador sendo um conjunto de caracteres? Já fiz isso algumas vezes e resolveu nos cenários em que me encontrei.

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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.

    quarta-feira, 22 de agosto de 2012 19:00
    Moderador
  • @Roberson Ferreira A primeira coisa q eu pensei foi por o delimitador '","'(aspas virgula aspas) Mas quando o campo vem nulo ele vem sem aspas. Por exemplo:

    "Igor",,"teste,oi","1"

    neste caso eu tenho 4 colunas onde a 2ª é nula e a 3ª ele utiliza a virgula dentro das aspas como delimitador e o resultado sai da seguinte forma:

    "Igor"

    NULL

    "teste

    oi","1"

    Onde o resultado deveria ser

    "Igor"

    NULL

    "teste,oi"

    "1"

    Mas se eu colocar o delimitador como '","'(aspas virgula aspas) o resultado vai sair da seguinte forma (caso a 2ª coluna POR EXEMPLO esteja vazia):

    "Igor",,"teste,oi

    1"


    Igor Auler

    sexta-feira, 24 de agosto de 2012 19:35
  • Mas você não consegue este arquivo sem aspas não?

    Você ainda não me respondeu, rs: quando você abre este csv no Excel ele vem certinho? Ou os textos também ficam com as aspas?

    Se ficar certinho, exporte-o com o seguinte delimitador: ;;;;;

    Cinco ";".

    Com isso, entre cada coluna existirão 5 ";".

    Ao importar no SQL você também informa que o delimitador são 5 ";".

    Não acredito que existirá um texto em alguma coluna que possuam estes caracteres em sequencia.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    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 Ricardo Russo terça-feira, 15 de janeiro de 2013 12:51
    sexta-feira, 24 de agosto de 2012 19:45
    Moderador