web-dev-qa-db-ja.com

SQL Server ExpressからCSVへのデータのエクスポート(引用とエスケープが必要)

SQLサーバーインストールからのユーザー入力データの大きなテキストフィールドを含む75,000行のテーブルをエクスポートしようとして2日を費やしました。このデータには、すべてのプレーンASCII文字、タブ、および改行が含まれています。すべてのフィールドが引用符で囲まれ、引用符で囲まれた列内の引用符が適切にエスケープされている( "")CSVをエクスポートする必要があります。

これまでに試したことは次のとおりです。-Management Studioからデータベースを右クリックしてExcelにエクスポートする:フィールドが長すぎるために失敗します。 -「テキスト区切り記号とコンマ区切りを使用したManagement Studioからフラットファイルへのデータエクスポート-完全に役に立たず、フィールド内の引用符をエスケープせず、ファイルを完全に曖昧にします。-コマンドラインからのBCP-引用符フィールドもサポートしません。

FasterCSV Rubyライブラリを使用してインポートする必要があります。引用符の区切り文字を非標準のASCII文字または複数の文字にすることはできません。\ nまたは\ rも許可しません引用符で囲まれていない列。

どんな助けも大歓迎です。

36
Xac Stegner

できます!ただし、何らかの理由でデフォルトではないため、引用された出力を使用するようにSSMSを特に構成する必要があります。

保存するクエリウィンドウでクエリに移動->クエリオプション...

「.csv結果を保存するときに、リスト区切り文字を含む文字列を引用符で囲む」ボックスをオンにします。

enabling quoted csv output

それから

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

出力します

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

これが私たち全員が望むものです。

45
Robert Calhoun

私もこれを理解しようとしています。あなたのテーブルは私のテーブルよりもはるかに大きいため、これがあなたのために働くかどうかはわかりませんが、これは私が気まぐれにしたことです:

  1. SELECT *ステートメントを実行して、Expressでテーブルを作成しました
  2. 結果の行を選択し、 Ctrl + C
  3. 開いたExcel
  4. 貼り付けていたテーブルの列数を強調表示しました
  5. 貼り付けて、それはうまくいきました!
  6. ExcelをCSVとしてエクスポートするだけで完了です。

おそらくばかげているように聞こえますが、実際にはうまくいきました。

25
ckpepper02

これを行う最も簡単な方法:

Excelデータインポートツールを使用する

  • [データ]> [他のソースから]> [SQL Serverから]に移動します。
  • サーバー名などを入力します。
  • インポートするテーブルまたはビューを選択します。

次に、インポートしたデータをCSVファイルに保存します。クエリをエクスポートする場合は、クエリをビューとして保存します

8

これを行うために使用するスクリプトの本質を次に示します。

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

それが役に立てば幸い!

2
Unixmonkey

私が見つけた最も簡単な解決策は、クエリに二重引用符を追加することです。

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

スプレッドシートでカスタムテキスト修飾子を使用できる場合、|などのよりエキゾチックな文字を使用できます。テキスト内の二重引用符を避けるため。

Daft..SSMSは、テキストフィールドを引用符で囲み、それらのフィールドで引用符を適切にエスケープした適切なCSVとしてエクスポートする必要があります。

2
Rolf Herbert

このプロセスにSSIS(SQL Server Integration Services)を使用することを誰も提案していないのはなぜですか? SSMS(SQL Server Management Studio)内からのインポート/エクスポート用のすべてのウィザードとツールは、包括的であることを完全に意図したものではありません(もちろん、そうではありません。 )。しかし、SSISは、このような問題に正確に取り組むために設計された非常にフル機能のETLツールです。学習曲線は少し急な場合がありますが、コンマ/引用符で区切られたcsvファイルにテーブルをエクスポートすることは特に難しくありません。

パッケージを作成する開発環境を使用するには、Visual Studioにこのアドオンが必要になる場合があります。 http://www.Microsoft.com/en-us/download/details.aspx?id=4231 (リンクはVS 2013向けです。他のバージョンのVSには他のリンクがあります)。

1
nick

私が思いついた最善の解決策は、すべての行を選択し、XMLに関してコピーを行うことです。

それをメモ帳ファイルに貼り付け、XMLファイルとして保存します。次に、そのXMLファイルをExcelから開くと出来上がりです!少なくともファイルの入手方法。

0
0
masoud ramezani

SSMSの「壊れた」CSVを適切なCSVに変換するための小さなスクリプトを作成しました。次の回答で見つけてください。

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

0
Niklas B.

ロバートカルホーンのソリューションは私にはうまくいきませんでした。コンマやキャリッジリターン/改行などのテキストがたくさんありました。上記のChris Christodoulouのソリューションにいくつか変更を加えて、エクスポート機能を使用しました。

SQL Management Studioで、データベースを右クリックし、[タスク]-> [データのエクスポート]を選択します。

次に、ソースとしてSQL Serverを選択し、宛先としてフラットファイルを選択します。ファイルにMyFile.csvという名前を付けます。

テキスト修飾子を「

[クエリを作成してデータ転送を指定する]を選択し、クエリに貼り付けます。次の設定をデフォルトのままにしておくことができます。

データをエクスポートしたら、Excelで開き、Excel形式で保存します。

0
VictorySaber