2010-02-13 5 views
23

Je suis en cours d'exécution d'une requête de SQL Server Management Studio 2005 qui a un fichier HTML stocké sous forme aa chaîne, par exemple:Nécessité d'exporter des champs contenant des sauts de ligne comme CSV à partir de SQL Server

SELECT html 
FROM table 

Cette requête affiche dans la fenêtre "Résultats", c'est-à-dire que chaque ligne contient une chaîne de tout le fichier HTML, avec un enregistrement par ligne. Lorsque j'utilise l'option "Résultats dans le fichier", l'export est exporté en tant que fichier CSV inutilisable avec des sauts de ligne dans le fichier CSV se produisant lorsque des sauts de ligne surviennent sur le terrain (c'est-à-dire dans le HTML). un par rangée au besoin. J'ai essayé d'expérimenter avec les options Query> Query pour les résultats "Grid" et "Text", en vain. Les champs exportés vers le fichier CSV n'apparaissent pas comme et apparaissent entre guillemets.

Quelques idées:

  1. Ne serait-il possible d'ajouter guillemets w/SQL?

  2. Existe-t-il un équivalent T-SQL aux commandes WITH CSV HEADER possibles dans d'autres dialectes?

Répondre

21

je ne vois pas où vous aurez beaucoup de succès l'exportation html à csv - c'est vraiment pas ce que csv est destiné. Il vaudrait mieux utiliser un format xml, où le code html peut être inclus 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 pourrait avoir des guillemets doubles en elle, vous auriez besoin d'échapper à ceux-ci.

+0

Merci Ray - c'est une idée intéressante, mais cela ne perturberait pas les sauts de ligne dans le HTML, que je veux finalement connaître? Convenu que CSV n'est pas idéal - existe-t-il un moyen d'exporter XML à partir de SQL Server? Ce n'est pas quelque chose que je connais du tout. –

+0

La suppression des sauts de ligne n'invalide pas le html, bien que cela rende certainement la lecture plus difficile. Jetez un oeil à la clause 'for xml', en utilisant le mode 'explicite' dans l'aide du serveur SQL. C'est un peu bizarre, mais vous devriez être capable d'obtenir votre code HTML en XML facilement. – Ray

+0

Spot, merci! – Luke

16

Selon le closest thing to a standard we have, un fichier CSV correctement formaté doit indiquer les champs contenant le séparateur (le plus souvent ; ou ,) ou un saut de ligne. SQL Server Management Studio peut faire cela, mais étonnamment, cette option n'est pas activée par défaut. Pour activer, allez à Outils → Options → → Résultats de la requête Résultats sur la grille et cochez la case « contenant les chaînes avec des séparateurs de liste lors de l'enregistrement des résultats .csv »

+12

Une note, c'est que SSMS qualifiera un champ contenant un délimiteur ou un qualificateur, mais il ne qualifiera pas un champ qui contient des sauts de ligne. Donc, à cet égard, SSMS produit des fichiers CSV techniquement invalides. –

+7

SSMS pour 2008 R2 doit être redémarré pour que ce paramètre prenne effet. – Oliver

+2

Pour que ce paramètre prenne effet, SSMS n'a pas besoin d'être redémarré, mais uniquement avec les nouvelles fenêtres de requête. –

18

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

+3

Cela devrait ** SO ** être la bonne réponse (si vous avez VS2013 bien sûr, mais si vous êtes un développeur de pile MS utilisant Sql Server, vous le ferez probablement de toute façon). Merci @Ufuk - vous avez sauvé la journée! – theyetiman

+0

Cela m'a sauvé tant de problèmes, je ne peux pas vous remercier assez.Je veux dire, la mise en forme dans Excel est toujours horrible de cette façon, mais c'est assez bon. – Christian

+0

Fonctionne bien dans les versions actuelles de Visual Studio, VS17 par exemple –

4

colonne avec des sauts de ligne: "mycolumn"

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

Cela remplace les sauts de ligne.

5

Je sais que cela est très vieille question et a répondu maintenant, mais cela devrait aider aussi:

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

il doit cracher un xml et vous pouvez importer ce XML dans Excel

+0

C'est le meilleur moyen. Cela fonctionnera toujours peu importe les champs. –

6

I Je sais quel âge c'est, mais je l'ai trouvé et d'autres aussi. Vous pouvez prendre la réponse de Martijn van Hoof un peu plus loin et supprimer les tabulations possibles (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 
0

Je suis arrivé à cette limitation en créant une base de données d'accès, en utilisant le « Lien vers la source de données en créant une table liée » caractéristique, ouvrant la table « liée », puis copier/coller dans Excel à partir de là. Excel peut enregistrer les données CSV au besoin. Vous devriez aussi pouvoir vous connecter directement à partir d'Excel, mais la fonction "table liée" dans Access me permet de configurer rapidement plusieurs tables à la fois.

1

trouvé cela utile, mais j'étais frappais encore des problèmes que mon champ était de type texte, donc je jetai le texte varchar(8000) et remplacer ci-dessus fonctionne comme un charme

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

Importation SQL Server et outil d'exportation de données, 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 double -quotes dans les données. Bonne chance!

+0

Il aide également avec les caractères Unicode qui sont incorrectement interprétés par Excel lors de l'exportation au format CSV. – rotman

Questions connexes