web-dev-qa-db-fra.com

Exportation de données de SQL Server Express vers CSV (citation et échappement nécessaires)

J'ai passé 2 jours à essayer d'exporter une table de 75 000 lignes contenant un grand champ de texte contenant des données d'entrée utilisateur à partir d'une installation de serveur SQL. Ces données contiennent tous les caractères ASCII, tabulations et nouvelles lignes simples. J'ai besoin d'exporter CSV où chaque champ est cité, et les guillemets dans les colonnes citées sont correctement échappés ("").

Voici ce que j’ai essayé jusqu’à présent: - Faites un clic droit sur la base de données de Management Studio et exportez-le vers Excel: échec en raison de la longueur trop longue du champ .- Exportation de données de Management Studio vers un fichier plat avec " séparateur de texte et séparation par des virgules - complètement inutile, n'échappe pas aux guillemets dans un champ, ce qui rend le fichier complètement ambigu .....- BCP en ligne de commande - ne prend pas non plus en charge les champs entre guillemets.

J'ai besoin d'importer avec la bibliothèque FasterCSV Ruby. Cela ne permet pas au délimiteur de guillemets d'être un caractère ascii non standard ou plus d'un caractère. Il n'autorise pas non plus\n ou\r dans les colonnes sans guillemets.

Toute aide est grandement appréciée.

36
Xac Stegner

Ça peut être fait! Cependant, vous devez configurer spécifiquement SSMS pour utiliser la sortie entre guillemets, car, pour une raison quelconque, ce n'est pas la valeur par défaut.

Dans la fenêtre de requête que vous souhaitez enregistrer allez dans Requête -> Options de requête ...

Cochez la case "chaînes de devis contenant des séparateurs de liste lors de l'enregistrement des résultats .csv".

enabling quoted csv output

puis

select 'Apple,banana,cookie' as col1,1324 as col2,'one two three' as col3,'a,b,"c",d' as col4

va sortir

col1,col2,col3,col4
"Apple,banana,cookie",1324,one two three,"a,b,""c"",d"

c'est ce que nous voulons tous.

44
Robert Calhoun

Ho cercato di capire anche questo. Si vous ne savez pas ce qu'il vous reste, dites-le maintenant, et s'il vous plaît, choisissez le meilleur disque, choisissez le meilleur de vous-même:

  1. Vous cherchez un exemple dans Express facade un code SELECT *
  2. Semplicemente selezionato le righe risultanti eCtrl+C
  3. Excel aperto
  4. Résultats quantitatifs de la colonne de la liste des voix incarnées
  5. Incollato, e ha funzionato!
  6. Ora basta esportare Excel viennent CSV e fatto.

Alors, probablement, sembra stupido, ma dans realtà ha funzionato par moi.

25
ckpepper02

Le moyen le plus simple de le faire:

Utiliser les outils d'importation de données Excel

  • Allez dans Données> À partir d'autres sources> À partir de SQL Server 
  • Entrez le nom du serveur, etc.
  • Sélectionnez la table ou la vue que vous souhaitez importer.

Enregistrez ensuite les données importées dans un fichier CSV . Si vous souhaitez exporter une requête, enregistrez-la en tant que vue.

8
Chris Christodoulou

Voici l'essence d'un script que j'utilise pour faire ceci:

require 'rubygems'
require 'active_record'
require 'tiny_tds'
require 'activerecord-sqlserver-adapter'
require 'acts_as_reportable'
require 'ruport'

ActiveRecord::Base.logger = Logger.new("log/debug.log")
ActiveRecord::Base.establish_connection(
  :adapter    => 'sqlserver',
  :mode       => 'dblib',
  :dataserver => 'servername',
  :username   => 'username',
  :password   => 'password',
  :timeout    => '60000'
)

class Table1 < ActiveRecord::Base
  set_table_name 'table_name'
  set_primary_key 'table_id'
  acts_as_reportable
end

Table1.report_table(:all).save_as("finished/table1.csv")

J'espère que ça aide!

2
Unixmonkey

Je suis curieux de savoir pourquoi personne n'a suggéré d'utiliser SSIS (SQL Server Integration Services) pour ce processus? Tous les assistants et outils d'importation/exportation à partir de SSMS (SQL Server Management Studio) ne sont absolument pas destinés à être exhaustifs (et ils ne le sont certainement pas, et oui, il y a beaucoup de problèmes auxquels Microsoft devrait faire face avec les limitations ). Mais SSIS est un outil ETL très complet conçu pour résoudre les problèmes exactement comme celui-ci. La courbe d'apprentissage peut être un peu raide, mais l'exportation d'une table dans un fichier CSV délimité par des virgules/guillemets n'est pas particulièrement difficile.

Il faudra peut-être cet ajout pour Visual Studio afin de disposer d’un environnement de développement pour créer un package: http://www.Microsoft.com/en-us/download/details.aspx?id=42313 (link is for VS 2013, d'autres liens sont disponibles pour d'autres versions de VS).

1
nick

La solution la plus simple que j'ai trouvée consiste à ajouter des guillemets dans votre requête.

SELECT '"'+MYCHARACTERDATA+'"' FROM MYTABLE

Si votre feuille de calcul vous permet d'utiliser un qualificateur de texte personnalisé, vous pouvez utiliser un caractère plus exotique, tel que | pour éviter les guillemets doubles dans le texte.

Daft..SSMS doit exporter en tant que fichier CSV approprié avec des champs de texte cités et des citations correctement échappées dans ces champs.

1
Rolf Herbert

La meilleure solution que je puisse trouver est de sélectionner toutes les lignes et de faire une copie au format XML.

Le coller dans un fichier bloc-notes et l'enregistrer en tant que fichier XML . Ouvrez ensuite ce fichier XML à partir d'Excel et le tour est joué! Au moins c'est comme ça que j'ai eu mon dossier.

0

Peut-être que le lien ci-dessous peut vous aider:

Importer/exporter des données avec SQL Server 2005 Express

0
masoud ramezani

Nous avons créé un petit script pour convertir le fichier CSV "brisé" de SSMS en un fichier CSV approprié. Trouvez-le dans cette réponse:

https://stackoverflow.com/a/46876236/1532201

0
Niklas B.

La solution de Robert Calhoun n'a pas fonctionné pour moi. Nous avions beaucoup de texte avec des virgules et des retours à la ligne/nouvelles lignes, etc. Nous avons utilisé la fonctionnalité d'exportation avec quelques modifications apportées à la solution de Chris Christodoulou ci-dessus.

Dans SQL Management Studio, cliquez avec le bouton droit de la souris sur la base de données et sélectionnez Tâches -> Exporter des données.

Choisissez ensuite SQL Server comme source et Fichier plat comme destination. Nommez le fichier MyFile.csv.

Définissez le qualificateur de texte comme "

Sélectionnez "Ecrire une requête pour spécifier le transfert de données" et collez-le dans votre requête . Vous pouvez laisser les paramètres suivants comme valeurs par défaut.

Avec les données exportées, ouvrez avec Excel et enregistrez au format Excel.

0
VictorySaber