大きなSSMS(SQL Server Management Studio)クエリ結果(2.5m行、9フィールド)を.csvまたはコンマ区切りの.txt(見出し付き)としてエクスポートしたい。 (MS SQL Server 2005 Management Studio。)
そのため、VBAプログラムに1行ずつ読み込む(データに対して特定の計算を行う)か、Excelでクエリを実行する(Microsoft Queryなど)ことができます。計算は複雑で、SSMS以外の場所で行うことを好みます。
SSMSで「テキストへのクエリ結果」と小さな回答(最大200kなどの数行)を選択した場合、もちろんコピーしてテキストエディターに貼り付けることができます。ここでの私の大きな答えとして、もちろん、一度に10万回、Ultra-Editなどのテキストエディターに200k行程度をコピーして貼り付けることができます。 (2.5mすべてを一度に試すと、SSMS内でメモリ警告が表示されます。)しかし、将来的には、よりエレガントなソリューションが必要です。
「ファイルへのクエリ結果」の場合、SSMSは常に.rptファイルに書き込みます。 (結果ウィンドウを右クリックして[名前を付けて保存]を選択すると、上記と同様にメモリエラーが発生します。)
->したがって、私の唯一のオプションは、SSMSに結果をファイル(つまり.rpt)に出力させ、その後、.rptを.txtに変換することです。
この.rptはCrystal Reportsファイルだと思いますか?それともそうではありません。 PCにCrystal Reportsがないので、それを使用してファイルを変換することはできません。
Ultra-Editで.rptを開くと正常に見えます。ただし、ExcelのMicrosoft Queryでは、見出しは表示されません。
VBAを使用して.rptを読み書きするだけで、ファイルのサイズが半分になります。 (330メガ〜180メガ)。 Microsoft Queryでは、見出しがすぐに表示されます(ただし、最初のフィールド名には、他のまったく異なる状況で私に起こった面白い主人公があります)。 Excelで意味のあるピボットテーブルを実行できるようです。
ただし、この新しいファイルをUltra-Editで開くと、中国語の文字が表示されます!まだどこかに面白いキャラクターがいるのでしょうか?
->おそらくどこかで利用可能な無料の(そしてシンプルで安全な)コンバーターアプリがあります。または、この.txtが私のVBAプログラムの読み込みに適していることを信頼する必要があります。
ありがとう
友人の助けを借りて解決策を見つけました:RptファイルはMS SQL Server Management Studioで生成されたプレーンテキストファイルですが、ANSIの代わりにUCS-2リトルエンディアンエンコーディングを使用しています。
-> Ultra-Editでは、オプション「ファイル、変換オプション、nicodeからASCII」がトリックを行いました。テキストファイルは330メガバイトから180メガバイトに減少し、ExcelのMicrosoft Queryは列を表示できるようになり、VBAはファイルを読み取って行を処理できるようになりました*。
追伸別の方法としては、MS Access(大きな結果を処理できる)を使用して、ODBC=を使用してデータベースに接続します。ただし、Tより少ないコマンドのJet-SQLを使用する必要があります-MS SQL Server Management StudioのSQL。どうやらMS Access 2007で.adpとして新しいファイルを作成し、SQL ServerバックエンドでT-SQLを使用できるようですが、MS Access 2010(私のPC)ではこのオプションはもう存在します。
簡単な方法:SQL Server Management Studioで、[クエリ]メニューに移動し、[クエリオプション…]> [結果]> [テキスト]> [出力形式]を[カンマ区切り]に変更します。ここで、クエリを実行してファイルにエクスポートし、ファイル名を変更したら、.rpt
から.csv
そしてExcelで開きます:)。
これが私の解決策です。
[〜#〜] bcp [〜#〜] を使用できます
コマンドプロンプトを開き、次のように入力します。
SET Q="select * from user1.dbo.table1"
BCP.EXE %Q% queryout query.out -S ServerName -T -c -t
-U -P
の代わりに-T
を使用できます。アプリにUNICODEに問題があります。 -C {code page}
を使用してコードページを強制できます。疑わしい場合は、850を試してください。
-t
はタブをフィールド区切り文字として強制します。カンマに変更できます-t,
良い点は、シェルコマンドを実行しているVBAから直接これを呼び出すことができることです。
これはあなたができると私が思う推奨の方法です。
My Source (DavidAirからの回答)
「グリッドへの結果」を選択し、グリッドを右クリックして「結果に名前を付けて保存...」を選択すると、CSVが保存されます。
実際には、一部の値にカンマが含まれていると、結果のCSVが適切にエスケープされないという問題があります。 RPTファイルには、固定幅の列が含まれているため、実際には非常に優れています。 Excelを使用している場合、結果をCSVに変換する比較的簡単な方法は、ExcelでRPTファイルを開くことです。これにより、テキストインポートウィザードが表示され、Excelは列を推測するのに非常に役立ちます。ウィザードを実行し、結果をCSVとして保存します。
上記の方法のいずれかを使用して、最初に.rptファイルのデータを取得します。
固定スペースの列を持つデフォルトの.rpt。 (262MB)
Unicodeで区切られたカンマ。 (52MB)-これを使用しました。
ファイル拡張子を.csvに変更します。
Excelで開いてインポートし、データを確認します。ファイルタイプは「テキストユニコード」です。
CSV(Comma Delimited)として保存します。これは25 MBに縮小されたサイズです。
いくつかの理由から、「SQL Serverインポートおよびエクスポートウィザード」の使用をお勧めします。
Management Studioでデータベースを右クリックし(テーブルではなくデータベースを右クリックする必要があります)、[タスク]> [データのエクスポート]を選択してアクセスできます。
データソースを要求された場合、「SQL Server Native Client」を選択できます。宛先を選択するよう求められたら、「フラットファイル宛先」を選択できます。
次に、使用するテーブルまたはクエリを指定するように求められます。
ツールの詳細については、次を参照してください。
私の場合、SSMSでクエリを実行し(その前にCTRL + SHIFT + Fを押します)、結果をウィンドウを開いてrptファイルとして保存しました。読み込めませんでした(コンピューターにCrystal Reportがインストールされていません)。 ..次回クエリを実行したときに、拡張子(* .txt)を付けて(すべてのファイル)セットとして保存したので、テキストファイルとして読み取ることができました。