web-dev-qa-db-fra.com

Besoin d'exporter des champs contenant des sauts de ligne en tant que CSV à partir de SQL Server

J'exécute une requête à partir de SQL Server Management Studio 2005 qui a un fichier HTML stocké sous forme de chaîne, par exemple:

SELECT html 
FROM table 

Cette requête s'affiche bien dans la fenêtre "Résultats", c'est-à-dire que chaque ligne contient une chaîne de l'ensemble du fichier HTML, avec un enregistrement par ligne.

Cependant, lorsque j'utilise l'option "Résultats dans un fichier", il l'exporte en tant que CSV inutilisable avec des sauts de ligne dans le CSV se produisant partout où des sauts de ligne se sont produits dans le champ (c'est-à-dire dans le HTML), plutôt plus d'une par ligne selon les besoins. J'ai essayé de tester les résultats de la requête> Options de requête pour les résultats "Grille" et "Texte", en vain. Les champs exportés vers le CSV ne pas semblent être inclus entre guillemets.

Quelques idées:

  1. Serait-il possible d'ajouter des guillemets avec le SQL?

  2. Existe-t-il des T-SQL équivalents aux commandes WITH CSV HEADER qui sont possibles dans d'autres dialectes?

31
John Horton

Je ne vois pas où vous aurez beaucoup de succès à exporter du html vers csv - ce n'est vraiment pas à cela que csv est destiné. Vous feriez mieux d'utiliser un format xml, où le code html peut être enfermé dans un élément cdata.

Cela dit, vous pouvez essayer d'utiliser la fonction Remplacer pour supprimer les sauts de ligne et vous pouvez ajouter manuellement les guillemets - quelque chose comme ceci:

select '"' + replace (replace (html, char(10), ''), char(13), '') + '"'

Si votre valeur html peut contenir des guillemets doubles, vous devez les échapper.

26
Ray

Si vous utilisez Visual Studio, Server Explorer est une solution alternative. Vous pouvez copier et coller correctement les résultats de sa grille.

19
Ufuk Hacıoğulları

Selon le chose la plus proche d'une norme que nous avons , un fichier CSV correctement formaté doit citer des champs contenant soit le séparateur (le plus souvent ; ou ,) ou un saut de ligne.

SQL Server Management Studio peut le faire, mais étonnamment, cette option n'est pas activée par défaut. Pour l'activer, allez dans Outils → Options → Résultats de la requête → Résultats dans la grille et cochez "Citer les chaînes contenant des séparateurs de liste lors de l'enregistrement des résultats .csv"

17
Zano

Je sais quel âge cela a, mais je l'ai trouvé et d'autres le pourraient aussi. Vous voudrez peut-être pousser la réponse de Martijn van Hoof un peu plus loin et supprimer les éventuels onglets (char (9)) en plus du retour chariot (13) et du saut de ligne (10).

SELECT REPLACE(REPLACE(REPLACE(mycolumn, CHAR(9), ''), CHAR(10), ''), CHAR(13), '') as 'mycolumn' FROM mytable
10
RPh_Coder

colonne avec des sauts de ligne: "macolonne"

SELECT REPLACE(REPLACE(mycolumn, CHAR(13), ''), CHAR(10), '') as `mycolumn` FROM mytable

Cela remplace les sauts de ligne.

7

je sais que c'est une très vieille question à laquelle on a répondu maintenant, mais cela devrait aussi aider:

 SELECT html
 From table
 For Xml Auto, Elements, Root('doc') 

il devrait cracher un xml et ensuite vous pouvez importer ce xml dans Excel

6
Baahubali

trouvé cela utile mais je rencontrais toujours des problèmes car mon champ était de type texte, donc je cast le texte en tant que varchar(8000) et au-dessus, remplacer fonctionne comme un charme

REPLACE(REPLACE(CAST([TEXT FIELD] AS VARCHAR(8000)), CHAR(10), ' '), CHAR(13), ' ') AS 'Field Name',
3
Neil

Outil d'importation et d'exportation de données SQL Server, FTW!

Démarrer -> Programmes -> Microsoft SQL Server -> Importer et exporter des données

Exemple de requête:

select *
from (
select 'Row 1' as [row], 'Commas, commas everywhere,' as [commas], 'line 1
line 2
line 3' as [linebreaks]

union all 

select 'Row 2' as [row], 'Nor any drop to drink,' as [commas], 'line 4
line 5
line 6' as [data]
) a

sortie CSV:

"row","commas","linebreaks"
"Row 1","Commas, commas everywhere,","line 1
line 2
line 3"
"Row 2","Nor any drop to drink,","line 4
line 5
line 6"

Avertissement: Vous devrez peut-être faire preuve de créativité avec des guillemets doubles dans les données. Bonne chance!

2
Joe Zamora