wake-up-neo.net

Daten von SQL Server Express nach CSV exportieren (Quotierung und Escape-Funktion erforderlich)

Ich habe zwei Tage lang versucht, eine 75.000-Zeilentabelle zu exportieren, die ein großes Textfeld mit Benutzereingabedaten aus einer SQL Server-Installation enthält. Diese Daten enthalten alle einfachen ASCII-Zeichen, Registerkarten und Zeilenumbrüche. Ich muss CSV exportieren, in dem jedes Feld in Anführungszeichen gesetzt ist und Anführungszeichen in den in Anführungszeichen enthaltenen Spalten ordnungsgemäß mit Escapezeichen versehen sind ("").

Folgendes habe ich bisher ausprobiert: - Rechtsklick auf die Datenbank aus Management Studio und Exportieren nach Excel: schlägt fehl, weil das Feld zu lang ist .- Datenexport aus Management Studio in Flat-Datei mit " Texttrennzeichen und Kommatrennung - völlig unbrauchbar: Es werden keine Anführungszeichen innerhalb eines Feldes durch Escapezeichen ersetzt, wodurch die Datei völlig mehrdeutig wird.

Ich muss mit der FasterCSV Ruby-Bibliothek importieren. Es ist nicht zulässig, dass das Anführungszeichen ein Nicht-Standard-ASCII-Zeichen oder mehr als ein Zeichen ist. Es erlaubt auch nicht\n oder\r in nicht zitierten Spalten.

Jede Hilfe wird sehr geschätzt.

36
Xac Stegner

Es kann gemacht werden! Sie müssen jedoch SSMS speziell für die Verwendung der zitierten Ausgabe konfigurieren, da dies aus irgendeinem Grund nicht der Standard ist.

Im Abfragefenster willst du speichern gehe zu Abfrage -> Abfrageoptionen ...

Aktivieren Sie das Kontrollkästchen "Anführungszeichenfolgen mit Listentrennzeichen beim Speichern von CSV-Ergebnissen".

enabling quoted csv output

dann

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

wird ausgegeben

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

was wir alle wollen.

44
Robert Calhoun

Ho cercato di capire anche questo. Non sono sicuro se questo funzionerà per te dal momento che il tuo tavolo è molto più grande del mio, ma questo è quello ho fatto solo per un capriccio:

  1. Das ist die letzte Ausgabe von Express Facendo Una Dichiarazione SELECT *
  2. Semplicemente selezionato le righe risultanti eCtrl+C
  3. Excel aperto
  4. Evidenziata la quantità della tabella colonne che stavo incollando
  5. Incollato, e ha funzionato!
  6. Für Excel wurde CSV entwickelt.

Also ich bin wahrscheinlich sembra stupido, ma in realtà ha funzionato per me.

25
ckpepper02

Der einfachste Weg, dies zu tun:

Verwenden Sie die Excel-Datenimporttools

  • Gehen Sie zu Daten> Aus anderen Quellen> Vom SQL-Server 
  • Geben Sie den Servernamen usw. ein.
  • Wählen Sie die Tabelle oder Ansicht aus, die Sie importieren möchten.

Speichern Sie dann die importierten Daten in einer CSV-Datei. Wenn Sie eine Abfrage exportieren möchten, speichern Sie die Abfrage als Ansicht

8

Hier ist die Essenz eines Skripts, mit dem ich genau das mache:

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

Ich hoffe es hilft!

2
Unixmonkey

Ich bin neugierig, warum niemand die Verwendung von SSIS (SQL Server Integration Services) für diesen Prozess vorgeschlagen hat. Alle Assistenten und Tools zum Importieren/Exportieren aus SSMS (SQL Server Management Studio) sind absolut nicht dazu gedacht, umfassend zu sein (und sie sind es sicherlich nicht, und ja, es gibt eine Menge, auf die Microsoft mit den Einschränkungen reagieren sollte ). SSIS ist jedoch ein sehr umfangreiches ETL-Tool, mit dem Probleme genau wie dieses gelöst werden können. Die Lernkurve kann etwas steil sein, aber das Exportieren einer Tabelle in eine durch Kommas/Anführungszeichen getrennte CSV-Datei ist nicht besonders schwierig.

Möglicherweise benötigen Sie dieses Add-On für Visual Studio, um eine Entwicklungsumgebung zum Erstellen eines Pakets zu erhalten: http://www.Microsoft.com/en-us/download/details.aspx?id=42313 (Link ist für VS 2013, andere Links sind für andere Versionen von VS verfügbar).

1
nick

Die einfachste Lösung, die ich gefunden habe, ist das Hinzufügen von Anführungszeichen in Ihre Abfrage.

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

Wenn Sie in Ihrer Tabelle ein benutzerdefiniertes Textqualifikationsmerkmal verwenden können, können Sie ein exotischeres Zeichen wie | verwenden um doppelte Anführungszeichen im Text zu vermeiden.

Daft..SSMS sollte als richtige CSV-Datei mit Textfeldern in Anführungszeichen und korrekt maskierten Zitaten in diesen Feldern exportieren.

1
Rolf Herbert

Die beste Lösung, die ich finden könnte, ist, alle Zeilen auszuwählen und eine Kopie in Bezug auf XML zu erstellen.

Fügen Sie die Datei in eine Notepad-Datei ein und speichern Sie sie als XML-Datei . Öffnen Sie dann die XML-Datei von Excel und voila! Zumindest so, wie ich meine Akte bekommen habe.

0

Vielleicht hilft Ihnen der unten stehende Link:

Importieren/Exportieren von Daten mit SQL Server 2005 Express

0
masoud ramezani

Wir haben ein kleines Skript erstellt, um "defekte" SSMS-CSV-Dateien in richtige CSV-Dateien umzuwandeln.

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

0
Niklas B.

Die Lösung von Robert Calhoun hat bei mir nicht funktioniert. Wir hatten viel Text mit Kommas und Zeilenumbrüchen/Zeilenumbrüchen usw. Wir verwendeten die Exportfunktion mit ein paar Änderungen an der oben genannten Lösung von Chris Christodoulou.

Klicken Sie in SQL Management Studio mit der rechten Maustaste auf die Datenbank und wählen Sie Aufgaben -> Daten exportieren.

Wählen Sie dann SQL Server als Quelle und Flat File als Ziel. Benennen Sie die Datei MyFile.csv.

Legen Sie das Textqualifikationsmerkmal als "

Wählen Sie "Eine Abfrage zur Festlegung der Datenübertragung schreiben" aus und fügen Sie sie in Ihre Abfrage ein. Sie können die nächsten Einstellungen als Standardeinstellungen belassen.

Öffnen Sie die exportierten Daten mit Excel und speichern Sie sie im Excel-Format.

0
VictorySaber