Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como corrigir o problema do qualificador de texto incorporado ao exportar dados para o arquivo simples CSV?


Eu não ofereceria essa resposta, exceto que você trabalhou tanto para documentá-la e foi votada sem resposta após um mês. Então, aqui vai. Suas únicas opções parecem ser alterar os dados ou alterar a ferramenta.

Quando a ferramenta está quebrada e o fornecedor não se importa, é um erro continuar tentando. É hora de mudar. Você se esforça muito para pesquisar exatamente como ele está quebrado e demonstrar que viola não apenas o RFC, mas a própria versão anterior da ferramenta. De quantas provas mais você precisa?

CSV é uma âncora de barco também. Se você tiver a opção, é melhor usar um formato de arquivo delimitado comum. Para muitos aplicativos, delimitado por tabulação é bom. O melhor delimitador IMO é '\' porque esse caractere não tem lugar no texto em inglês. (Por outro lado, não funcionará para dados que contenham nomes de caminho do Windows.)

O CSV tem dois problemas como formato de troca. Primeiro, não é todo esse padrão; aplicativos diferentes reconhecem versões diferentes, independentemente do que o RFC possa dizer. Segundo (e relacionado) é que não constitui uma linguagem regular em termos de CS, e é por isso que não pode ser analisado como uma expressão regular. Comparar com ^([^\t]*\t)*[\t]*$ para uma linha delimitada por tabulação. A implicação prática da complexidade da definição do CSV é (veja acima) a relativa escassez de ferramentas para lidar com eles e sua tendência a serem incompatíveis, principalmente durante as primeiras horas.

Se você der a inicialização do CSV e do DTS, você tem boas opções, uma das quais é bcp.exe . É muito rápido e seguro porque a Microsoft não se sente tentada a atualizá-lo há anos. Eu não sei muito sobre DTS, mas caso você precise usá-lo para automação, o IIRC existe uma maneira de invocar utilitários externos. Cuidado, porém, que bcp.exe não retorna o status de erro para o shell de forma confiável.

Se você está determinado a usar o DTS e manter o CSV, sua melhor opção restante é escrever uma exibição que prepare os dados adequadamente para ele. Eu, se apoiado nesse canto, criaria um esquema chamado, digamos, "DTS2012CSV", para que eu pudesse escrever select * from DTS2012CSV.tablename , dando a qualquer um que se importe uma chance de entendê-lo (porque você irá documentá-lo, não é, em comentários no texto da visualização?). Se necessário, outros podem copiar sua técnica para outros extratos quebrados.

HTH.