it-swarm.it

Esportazione di dati da SQL Server Express a CSV (è necessario citare ed eseguire l'escape)

Ho trascorso 2 giorni cercando di esportare una tabella di 75.000 righe contenente un campo di testo di grandi dimensioni di dati di input dell'utente da un'installazione server SQL. Questi dati contengono tutti i caratteri ascii, le tabulazioni e le nuove righe. Ho bisogno di esportare CSV dove ogni campo è quotato e le virgolette all'interno delle colonne citate sono opportunamente scappate ("").

Ecco cosa ho provato finora: - Facendo clic con il tasto destro sul database da Management Studio ed esportando su Excel: non riesce a causa del campo troppo lungo - Esportazione dei dati da Management Studio a file flat con " separatore di testo e separazione di virgole - completamente inutile, non sfugge virgolette all'interno di un campo rendendo il file completamente ambiguo .- BCP dalla riga di comando - inoltre non supporta i campi di quoting.

Devo importare con la libreria FasterCSV Ruby. Non consente al delimitatore di virgolette di essere un carattere ascii non standard o più di un carattere. Inoltre, non consente\n o\r nelle colonne non quotate.

Qualsiasi aiuto è molto apprezzato.

36
Xac Stegner

Si può fare! Tuttavia, è necessario configurare in modo specifico SSMS per utilizzare l'output tra virgolette, poiché per alcuni motivi non è l'impostazione predefinita.

Nella finestra della query che si desidera salvare passare a Query -> Opzioni query ...

Seleziona la casella "cita le stringhe contenenti i separatori di elenchi quando salvate risultati .csv".

enabling quoted csv output

poi

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

uscirà

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

che è quello che vogliamo tutti.

44
Robert Calhoun

Ho cercato di capire anche questo. Il mio tavolo è molto più grande del mio, ma questo è quello che ho fatto solo per un capriccio:

  1. Ho tirato su il mio tavolo in Express facendo una dichiarazione SELECT *
  2. Semplicemente selezionato le righe risultanti eCtrl+C
  3. Excel aperto
  4. Evidenziata la quantità di colonne della tabella che stavo incollando
  5. Incollato, e ha funzionato!
  6. Ora basta esportare Excel come CSV e fatto.

Quindi che probabilmente sembra stupido, ma in realtà ha funzionato per me.

25
ckpepper02

Il modo più semplice per farlo:

Utilizzare gli strumenti di importazione dei dati di Excel

  • Vai a Dati> Da altre fonti> Da server Sql 
  • Inserisci il nome del server, ecc.
  • Seleziona la tabella o la vista che desideri importare.

Quindi salvare i dati importati in un file CSV . Se si desidera esportare una query, salvare la query come vista

8

Ecco l'essenza di uno script che uso per fare proprio questo:

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")

Spero che sia d'aiuto!

2
Unixmonkey

Sono curioso perché nessuno ha suggerito di utilizzare SSIS (SQL Server Integration Services) per questo processo? Tutte le procedure guidate e gli strumenti per l'importazione/esportazione dall'interno di SSMS (SQL Server Management Studio) non sono assolutamente intesi per essere completi (e sicuramente non lo sono, e sì, c'è molto che Microsoft dovrebbe dover rispondere per le limitazioni ). Ma SSIS è uno strumento ETL molto completo progettato per affrontare problemi esattamente come questo. La curva di apprendimento può essere un po 'ripida, ma esportare una tabella in un file csv delimitato da virgole/virgolette non è particolarmente difficile.

Potrebbe essere necessario aggiungere questo componente aggiuntivo a Visual Studio per creare un ambiente di sviluppo per creare un pacchetto: http://www.Microsoft.com/en-us/download/details.aspx?id=42313 (il collegamento è per VS 2013, altri link sono disponibili per altre versioni di VS).

1
nick

La soluzione più semplice che ho trovato è quella di aggiungere doppie virgolette nella tua query;

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

Se il tuo foglio di calcolo ti consente di utilizzare un qualificatore di testo personalizzato, puoi utilizzare un carattere più esotico come | per evitare doppie virgolette nel testo.

Daft..SSMS dovrebbe esportare come CSV appropriato con i campi di testo citati e le virgolette opportunamente sfuggite in quei campi.

1
Rolf Herbert

La soluzione migliore che potrei trovare è selezionare tutte le righe e fare una copia di XML.

Incollalo in un file del blocco note e salvalo come file XML . Quindi apri il file XML da Excel e voilà! Almeno che come ho ottenuto il mio file.

0

Forse il link sottostante ti può aiutare:

Importa/Esporta dati con SQL Server 2005 Express

0
masoud ramezani

Abbiamo creato un piccolo script per convertire il CSV "spezzato" SSMS in un file CSV appropriato, trovandolo in questa risposta:

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

0
Niklas B.

La soluzione di Robert Calhoun non ha funzionato per me. Abbiamo avuto un sacco di testo con virgole e ritorni a capo/newlines ecc Abbiamo usato la funzionalità di esportazione con alcune modifiche alla soluzione di Chris Christodoulou sopra.

In SQL Management Studio, fare clic con il pulsante destro del mouse sul database e selezionare Attività -> Esporta dati.

Quindi scegliere SQL Server come origine e File flat come destinazione. Denominare il file MyFile.csv.

Imposta il qualificatore di testo come "

Seleziona "Scrivi una query per specificare il trasferimento dati" e incolla la query . Puoi lasciare le impostazioni successive come predefinite.

Con i dati esportati, apri con Excel e salva in formato Excel.

0
VictorySaber