2011-09-12 31 views
36

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

これまでに試したことは次のとおりです。 - Management Studioからデータベースを右クリックしてExcelにエクスポートすると、フィールドが長すぎるため失敗します。 - フラットテキストの区切りとコンマ分離」を持つファイルへのManagement Studioからデータのエクスポート - 。完全に役に立たない、完全にあいまいなファイルを作成するフィールド内の引用符をエスケープしません - コマンドラインからBCP - 。また、引用フィールドをサポートしていません

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

助けを歓迎します。

+1

あなただけのRubyプログラムからSQL Serverに接続し、輸出をスキップすることができます/インポートステップですか? Ruby-DBIパッケージを使用してselect *に接続し、必要に応じて引用するだけです。 – Doon

+0

@Doonを調べる価値があります。 Rubyで接続して結果を得ることができたら、FasterCSVを使用して有効なCSVをエクスポートすることができます。 SQLサーバへのリモート接続を許可しない厳密な権限を持つマシンで作業しているので、外部クライアントから接続できません。 –

+0

SQL Server 2012を使用している場合、この問題が発生する可能性があります。https://connect.microsoft.com/SQLServer/feedback/details/735714 – andrej351

答えて

1

多分、以下のリンクはあなたを助けることができます:

Import/Export data with SQL Server 2005 Express

+3

残念ながら、これは役に立ちません。 SQL Server Expressに付属するすべてのツールは、無効なCSVを作成します。 –

25

私もこれを理解しようとしています。私はSELECT *声明

  • を行うことにより、Expressで私のテーブルをプルアップ

    1. :あなたのテーブルは私よりもはるかに大きいので、これはあなたのために働くだろうが、これは、私はちょうど気まぐれの外に何をしたかであるかどうかわかりません単純に選択した結果の行とはCtrl +C
    2. オープンエクセル
    3. は私が貼り付けた表が貼り付け
    4. があったが、それはWORをfrigginの列の量を強調しましたケッド!
    5. 今すぐExcelをCSV形式でエクスポートして完了してください。

    私はそれがおそらく馬鹿だと知っていますが、実際には私のために働いていました。ここで

  • +5

    この回答は本当にupvotedする必要があります。私はこれが実際に働くOPよりもショックです。私は、プロダクションサーバにExcelなどがインストールされていないため、リモートデスクトップ上に170 K行のテーブルを作成しました。 ゲストのRDPシステムに入り、SQLを実行し、行をコピーした後、RDPセッションを実行しているホストシステムに戻り、OpenOfficeに貼り付けました。 RDPでクリップボードのデータをストリーミングするのに約10分かかりました。後で再描画するためにOpenOfficeを少しドラッグしなければなりませんでしたが、エスケープされたデータが作成されました。 悲しいですが真です。 –

    +14

    私は、マイクロソフトのエンジニアが日常的に顔を揃えてくれることを願っています。 –

    +3

    これは絶対にうまくいくので、答えとしてマークされていないのは残念です。私の場合、SSMSからのエクスポートは、改行で文字列を正しくエスケープしていませんでした。 Excelでのコピー/ペーストとその後のエクスポートは、CSVをよりよく処理するため、答えでした。 –

    2

    は、私はちょうどこれを行うために使用するスクリプトの本質です:

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

    はそれが役に立てば幸い!

    41

    できます!ただし、何らかの不都合な理由により、デフォルトではないため、引用出力を使用するように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" 
    

    +0

    データに引用符を付けるがカンマはない場合は、http://stackoverflow.com/questions/14573623/whats-a-semantically-correct-way-to-parse-csv-from-sql-server-2008/14575076に動作するRubyメソッド(FasterCSVはありません) –

    +5

    このソリューションは特定のクエリ用です。 .csv結果を保存するとき、[ツール]> [オプション]> [クエリ結果]> [SQL Server]> [結果をグリッド]> [リスト区切りを含む文字列を引用符で囲みます] –

    +10

    改行を含むテキストフィールドでは機能しません。 – jrothenbuhler

    1

    なぜこのプロセスに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=42313 )。他のバージョンのVSではリンクが利用できます。

    +0

    これは最高のゾルですけれども、Excelへの迅速かつ汚れた一回限りのコピーをしたいときは、それほど多くの努力のように感じます。これは難しいことではありません! – aucuparia

    7

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

    • Excelデータのインポートツールを使用してデータへの移動>他のソースから> SQL Serverの
    • からサーバ名を記入など
    • インポートする表またはビューを選択します。

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

    +0

    これは元の問題に対する解決策です。私にとってはローカルで働いていましたが、セキュリティ上の制約のため、このようにExcelに接続できないデータベースがあります。 :-( – Ads

    +2

    引用、改行、奇妙な文字などのデータがたくさんありました。これはうまくいきました。ありがとうございます(ただし、Excelを見るためには新しいテーブルに列を選択する必要がありましたテーブルを結果セットの代わりに) –

    +0

    はい、ビューを作成してエクスポートして、SQLを実行してアドホックなレポートを作成するのではなく、 – Dave

    0

    Robert Calhounのソリューションは私にとっては機能しませんでした。カンマと改行/改行などのテキストがたくさんありました。 上記のChris Christodoulouのソリューションにいくつかの変更を加えて、エクスポート機能を使用しました。

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

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

    は、あなたのクエリで貼り付けるのデータ転送を指定するクエリを書く "

    セレクト」などのテキスト修飾子を設定します。 あなたがデフォルトとして次の設定を残すことができます。エクスポートしたデータで

    、私が思い付くことができExcelとのオープンとExcel形式で保存します。

    +0

    D'oh .. !!!!エラー0xc020802e:データフロータスク1: "Destination - testttttt_csv.Inputs [フラットファイル送り先入力] .Columns [Main_Content]"のデータ型は、DT_NTEXTですが、実際にはこのプレビューは正常に機能しませんでした。 ANSIファイルでサポートされています。代わりにDT_TEXTを使用し、データ変換コンポーネントを使用してデータをDT_NTEXTに変換してください。 (SQL Serverのインポートとエクスポートウィザード) – Ads

    0

    最善の解決策は、すべての行を選択し、XMLへとコピーを行うことです。

    メモ帳ファイルに貼り付けて保存それはXMLファイルとして。 その後、そのXMLファイルをExcelとVOilaから開きます!私のファイルをどうやって入手したのか

    0

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

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

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

    関連する問題