59

大きな SSMS (SQL Server Management Studio) クエリ結果 (2.5m 行、9 フィールド) を .csv またはカンマ区切りの .txt (見出し付き) としてエクスポートしたいと考えています。(MS SQL Server 2005 Management Studio。)

そのため、それを行ごとに VBA プログラムに読み込む (データに対して特定の計算を行う) か、Excel で (たとえば Microsoft Query を使用して) クエリを実行できます。計算は複雑で、SSMS 以外の場所で行うことを好みます。

SSMS で「テキストへのクエリ結果」を選択し、小さな回答 (数行、たとえば 200k まで) を選択した場合、もちろん、テキスト エディターに単純にコピーして貼り付けることができます。ここでの私の大きな答えについては、もちろん、一度に 20 万行ほどを 10 回コピーして、Ultra-Edit などのテキスト エディターに貼り付けることができます。(一度に 2.5m をすべて試すと、SSMS 内でメモリ警告が表示されます。) しかし、将来的には、より洗練されたソリューションが必要です。

「ファイルへのクエリ結果」の場合、SSMS は常に .rpt ファイルに書き込みます。(結果ウィンドウを右クリックして [名前を付けて保存] を選択すると、上記と同様にメモリ エラーが発生します。)

-->私の唯一のオプションは、SSMSにその結果をファイル、つまり.rptに出力させ、その後.rptを.txtに変換することです。

この .rpt は Crystal Reports ファイルだと思いますか? そうじゃない。PC に Crystal Reports がないため、Crystal Reports を使用してファイルを変換できません。

Ultra-Edit で .rpt を開くと、問題なく表示されます。ただし、Excel の Microsoft Query では、見出しは表示されません。

VBA を使用して .rpt を単純に読み書きすると、ファイルのサイズが半分になります。(330メガから180メガ)。Microsoft Query では、見出しが表示されるようになりました (ただし、最初のフィールド名にはおかしな先頭文字が含まれていますが、以前はまったく別の状況で発生しました)。Excelで意味のあるピボットテーブルを作成できるようです。

しかし、この新しいファイルを Ultra-Edit で開くと、漢字が表示されます! どこかに面白いキャラクターがまだいるのでしょうか?

--> 無料の (そしてシンプルで安全な) 変換アプリがどこかにあるのではないでしょうか? または、この .txt が VBA プログラムへの読み込みに問題ないことを信頼する必要があります。

ありがとう

4

8 に答える 8

9

友人の助けを借りて、解決策を見つけました。Rpt ファイルは、MS SQL Server Management Studio で生成されたプレーン テキスト ファイルですが、ANSI ではなく UCS-2 リトル エンディアン エンコーディングを使用しています。

--> Ultra-Edit では、オプション 'file, conversion options, unicode to ASCII ' が効果的でした。テキスト ファイルは 330 MB から 180 MB に縮小され、Excel の Microsoft Query は列を表示できるようになり、VBA はファイルを読み取って行を処理できるようになりました*。

Ps もう 1 つの方法は、MS Access (大きな結果を処理できる) を使用し、ODBC でデータベースに接続することでした。ただし、MS SQL Server Management Studio の T-SQL よりもコマンドが少ない Jet-SQL を使用する必要があります。どうやら、MS Access 2007 で新しいファイルを .adp として作成し、T-SQL を使用して SQL Server バックエンドに接続できるようです。しかし、MS Access 2010 (私の PC) では、このオプションはもう存在しないようです。

于 2012-05-15T09:47:14.277 に答える
8

BCPを使用できます

コマンド プロンプトを開き、次のように入力します。

SET Q="select * from user1.dbo.table1"
BCP.EXE %Q% queryout query.out -S ServerName -T -c -t
  • SQL 認証-U -Pに ( の代わりに) を使用できます。-T
  • アプリの UNICODE に問題があります。を使用してコード ページを強制できます-C {code page}。迷ったら850を試してみてください。

  • -tタブをフィールド区切り文字として強制しますが、コンマに変更できます-t,

良い点は、シェル コマンドを実行している VBA から直接呼び出すことができることです。

于 2012-10-09T02:48:41.617 に答える
4

これは、あなたがそれを行うことができる推奨される方法です。


私の情報源(DavidAir からの回答)

「結果をグリッドに」を選択し、グリッドを右クリックして「名前を付けて結果を保存...」を選択します。これにより、CSV が保存されます。

実際には、一部の値にコンマが含まれている場合、結果の CSV が適切にエスケープされないという問題があります。RPT ファイルには固定幅の列が含まれているため、実際には非常に優れています。Excel をお持ちの場合、結果を CSV に変換する比較的簡単な方法は、RPT ファイルを Excel で開くことです。これにより、テキスト インポート ウィザードが表示され、Excel は列を推測するのに非常にうまく機能します。ウィザードを実行し、結果を CSV として保存します。

于 2012-05-15T13:05:11.943 に答える