Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment résoudre le problème de qualificateur de texte intégré lors de l'exportation de données vers un fichier plat CSV ?

Je n'offrirais pas cette réponse, sauf que vous avez travaillé si dur pour la documenter et qu'elle a été votée sans réponse après un mois. Alors, voilà. Vos seuls choix semblent être de modifier les données ou de changer d'outil.

Lorsque l'outil est cassé et que le vendeur s'en moque, c'est une erreur de continuer à essayer. Il est temps de changer. Vous avez consacré beaucoup d'efforts à rechercher exactement comment il est cassé et à démontrer qu'il viole non seulement la RFC, mais aussi la version précédente de l'outil. De combien de preuves supplémentaires avez-vous besoin ?

CSV est aussi une ancre de bateau. Si vous en avez la possibilité, il vaut mieux utiliser un format de fichier délimité ordinaire. Pour de nombreuses applications, délimité par des tabulations, c'est bien. Le meilleur délimiteur IMO est '\' car ce caractère n'a pas sa place dans le texte anglais. (En revanche, cela ne fonctionnera pas pour les données contenant des noms de chemin Windows.)

CSV a deux problèmes en tant que format d'échange. Tout d'abord, ce n'est pas si standard que ça; différentes applications reconnaissent différentes versions, quoi que dise la RFC. Deuxièmement (et lié) est qu'il ne constitue pas une langue régulière en termes CS, c'est pourquoi il ne peut pas être analysé comme une expression régulière. Comparer avec ^([^\t]*\t)*[\t]*$ pour une ligne délimitée par des tabulations. L'implication pratique de la complexité de la définition de CSV est (voir ci-dessus) la pénurie relative d'outils pour les gérer et leur tendance à être incompatibles, en particulier pendant les petites heures.

Si vous donnez le démarrage à CSV et DTS, vous avez de bonnes options, dont l'une est bcp.exe . C'est très rapide et sûr car Microsoft n'a pas été tenté de le mettre à jour depuis des années. Je ne connais pas grand-chose à DTS, mais au cas où vous deviez l'utiliser pour l'automatisation, IIRC permet d'invoquer des utilitaires externes. Attention cependant, que bcp.exe ne renvoie pas l'état d'erreur au shell de manière fiable.

Si vous êtes déterminé à utiliser DTS et à vous en tenir à CSV, alors votre meilleure option restante est vraiment d'écrire une vue qui prépare les données de manière appropriée. Je créerais, s'il était reculé dans ce coin, un schéma appelé, disons, "DTS2012CSV", afin que je puisse écrire select * from DTS2012CSV.tablename , donnant à quiconque s'en soucie une chance de le comprendre (parce que vous le documenterez, n'est-ce pas, dans les commentaires du texte de la vue ?). Si besoin est, d'autres peuvent copier sa technique pour d'autres extraits cassés.

HTH.