• ベストアンサー

選択したフィールドだけのCSVを出力

ACCESS2003とSQLserver2008を使っています。 エンドユーザが画面でフィールド名を選択して、必要なフィールドだけ のCSV(エクセル)を出力したいのですが、そんなツールはないでしょうか? 作り込むとしたら、ストアドでSELECT文のフィールド名やテーブル名に 変数を使うことは可能でしょうか? (試したらフィールド名自体が件数分表示されました、テーブルは エラーになりました) また、どこかにサンプルなどはないでしょうか?

  • SEsyo
  • お礼率78% (64/82)

質問者が選んだベストアンサー

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

http://www.sint.co.jp/products/siob/ob/re/requirements.html#requirements02 SQL Serverでの実績はありませんが、Oracleと接続しての実績です。 あるテーブルのデータを表示する際、任意フィールドを絞りこみ表示させることができます。さらにその結果をExcelに直接出力すること もできます。

SEsyo
質問者

お礼

ありがとうございます、お値打ちなツールなので、試用版で試してみます。

SEsyo
質問者

補足

トライアルで試してみました。 確かにフィールドを絞りこんだり、レコードの絞り込みも希望通りの機能でした。 ただ、一度設定した絞り込みの内容を名前をつけて保存できたり、 テーブルごとに覚えておいて、次回のデフォルトとして表示される 機能が欲しいのですが、付いているのでしょうか? 多機能で効率がいいツールですので開発用に導入を検討してみますが、 エンドユーザ用にこの機能だけに特化した様な(安価で)シンプルな ツールはないでしょうか? 

その他の回答 (3)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.4

sqlserverの接続例です。 http://www37.atwiki.jp/kuronekosoft/pages/14.html デモです。 http://kuronekosoft.nobody.jp/tutorial/s_tutorial01.html 黒猫 Studio はSELECT文を作る必要がありますから、ちょっと敷居が 高いですかね。

SEsyo
質問者

お礼

ありがとうございました、デモを見たのですが エンドユーザには無理と判断し没としますが、 開発担当者用で検討してみます。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

ツールならフリーの http://www.vector.co.jp/soft/winnt/business/se427666.html とか、有償でodbc経由になりますが http://www.est.co.jp/skylink/ とか

SEsyo
質問者

お礼

ありがとうございます、フリーの黒猫をDLしたのですが接続できませんでした。 事前に何らかの作業が必要なんでしょうか? (OLE DB プロバイダとかODBCとかありますがスキル不足で???状態です)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

ストアドのサンプルを示しておきましょうか。動的クエリを使います。 CREATE PROCEDURE ap_DataExtractor (@TABLE nvarchar(128),@FIELDLIST nvarchar(max)) AS BEGIN SET NOCOUNT ON EXEC ('SELECT '+@FIELDLIST+' FROM '+@TABLE) END EXEC ap_DataExtractor 'TABLE1','Field2,Field5,Field7' でも、これだと正しくないテーブル、フィールドを指定するとエラーになります。 また、いわゆる不正なパラメータを渡されるといろいろできてしまうので、 通常は渡されたパラメータを検証します(詳しくは説明しません) CREATE PROCEDURE ap_DataExtractor (@TABLE nvarchar(128),@FIELDLIST nvarchar(max)) AS BEGIN SET NOCOUNT ON --有効なテーブルか IF (object_id(@TABLE) IS NULL) RETURN 99 --有効なフィールドか DECLARE @FIELDXML xml = CONVERT(xml,'<F>'+REPLACE(@FIELDLIST,',','</F><F>')+'</F>') DECLARE @NEWFIELDLIST nvarchar(max) SELECT @NEWFIELDLIST=ISNULL(@NEWFIELDLIST+',','')+c.name FROM sys.columns c INNER JOIN (SELECT x.COL.value('./text()[1]','nvarchar(128)') FIELD FROM @FIELDXML.nodes('/F') as x(COL)) f ON f.FIELD=c.name WHERE object_id=object_id(@TABLE) IF (@NEWFIELDLIST IS NULL) RETURN 99 --クエリ実行 EXEC ('SELECT '+@NEWFIELDLIST+' FROM '+@TABLE) END GO 本当ならば、このストアドをbcpユーティリティで実行するとそのままCSVが出来上がって一番楽なのですが、 リンクページの理由によりお勧めできません。 別の方法でCSV化してください。 http://support.microsoft.com/kb/952734/ja (2008でも直っていません)

SEsyo
質問者

お礼

サンプルありがとうございます、解析して勉強してみます。

関連するQ&A

  • SQL ServerのテーブルをCSVへ出力したい

    お世話になっております。 httpで、インターネット経由にて SQL Serverのテーブルから条件に合致したデータをCSVへ出力しダウンロードする 仕組みを作りたいと考えております。 例 ■テーブルA KeyA 項目1 項目2 001 100 200 002 200 250 003 300 350 select * from KeyA =para paraはパラメタとして渡し、結果をpara.CSVのようにCSVファイルへ出力したいのです。 sqlcmdを使えば、できそうな感じだったのですがよくわからなかったのが (1)sqlcmdのSQL文にパラメタを渡すことができるのか、できるのならどうやるのか (2)出力ファイル名もパラメタ化したいのだができるのか、できるのならどうやるのか (3)ネット経由でsqlcmdを実行することができるのか、できるのならどうやるのか (環境) SQLServer2008R2 IIS ご教授頂けましたら大変ありがたいです。 よろしくお願いいたします。

  • 二つのテーブルの同期

    先日質問した「選択したフィールドだけのCSVを出力」を作り込もうとしています。 テーブル名とフィールド名を管理するテーブルを作りました。 自動的に管理テーブルのメンテナンスをしたいと考えました。 その管理テーブルとSELECT文(sysobjects.name,syscolumns.nameを取り出す) の間で同期を取る為に、ストアドを作ろうとしているのですが解りません。 要は、管理テーブルに有ってSELECT文に無いものを管理テーブルから削除。 (フィールドが消されたか名前が変えられた時) 管理テーブルに無くてSELECT文に有るものを管理テーブルに追加。 (フィールドが追加されたか名前が変えられた時) この二点が出来れば同期が取れると考えていますが、サブクエリーにな ると 思うのですがうまく作れません、ご教授をお願いします。

  • データベース単位でのCSV出力方法について

    データベース単位でのCSV出力方法について phpからデータベースのバックアップ機能として、 データベース単位でCSV出力を行いたいと思っています。 テーブル単位で出来る記事は見受けられるのですが、 上記の方法は可能でしょうか? それともう一つお聞きしたいことがあります。 SQL文が格納された変数をexec関数で実行しているのですが、 直接phpmyadminでは成功するのにもかかわらず、 csvファイルが生成されません。 下記にSQL文を記しておきます。 --SQL文-- select * from users into outfile "C:/works/~中略~/dump_0426.csv" fields terminated by ',' ENCLOSED BY '"' ご教授よろしくお願い致します。 【環境】 DB:mysql5.0.51b-community PHP:5.2.6

    • ベストアンサー
    • MySQL
  • CSV出力スクリプトについて

    CSV出力のスクリプトを作成しました。 単純に1つのテーブルをそのままCSVで出力するだけです。 件数は60万件程度です。 問題はたとえばKAIIN_NOの項目が桁数20桁の場合に出力されるCSVが20桁を超えて50桁くらいで出力されたりします。項目桁数と同じではなくてもよいのですが、空白を出力したくないです。 なにかよい方法はありますでしょうか? ※Select文でTrimをかけても効果はありませんでした。 --CSV出力 -- set line 100 -- set echo off コマンド表示を抑止する -- set termout off 画面出力を抑止する -- set heading off 列タイトルの表示を抑止する -- set feedback off 結果メッセージの表示を抑止する -- set colsep ',' 列と列の区切りをカンマ(,)にする set line 100 set echo off set termout off set heading off set feedback off set colsep ',' /* spoolコマンドでファイル出力を開始する */ spool C:\tmp\sample.csv /* 問い合わせ結果がファイルtest.csvに出力される */ SELECT KAIIN_NO, STS_NO, SYOHIN_NO FROM SAMPLE; /* spool offでファイル出力を終了する */ spool off

  • CSV出力スクリプトについて

    CSV出力のスクリプトを作成しました。 単純に1つのテーブルをそのままCSVで出力するだけです。 件数は60万件程度です。 問題は13,4件に1行改行されてしまいます。 この改行を省くことができるでしょうか? --CSV出力 -- set line 100 -- set echo off コマンド表示を抑止する -- set termout off 画面出力を抑止する -- set heading off 列タイトルの表示を抑止する -- set feedback off 結果メッセージの表示を抑止する -- set colsep ',' 列と列の区切りをカンマ(,)にする set line 100 set echo off set termout off set heading off set feedback off set colsep ',' /* spoolコマンドでファイル出力を開始する */ spool C:\tmp\sample.csv /* 問い合わせ結果がファイルtest.csvに出力される */ SELECT KAIIN_NO, STS_NO, SYOHIN_NO FROM SAMPLE; /* spool offでファイル出力を終了する */ spool off

  • SQLで同じフィールドを2つ取りだしたい

    以下のテーブルからCSVを出力する際、 ID | 名称 | コード1 | コード2 1 |  A  |  111  |  444 2 |  B  |  222  |  555 3 |  C  |  333  |  666 「ID/名称/コード1コード2」のように取りだす場合のSQL文は SELECT ID, 名称, コード1 || コード1 FROM テーブル名 となると思いますがこれを、「ID/名称コード1/名称コード2」のように同じフィールドを同じ行に2回登場させたい場合はどうすれば宜しいでしょうか。 SELECT ID, 名称 || コード1, 名称 || コード2 FROM テーブル名 とした場合にはエラーになってしまいます。 宜しくお願い致します。

  • ファイルメーカーでcsv出力

    ファイルメーカーのcsv出力で質問があります。 明細テーブルと顧客テーブルの内容を連結してcsvファイルを出力したいのですが、 (明細テーブルの内容に顧客テーブルより顧客名称を付与する) どういった方法で出力するのが良いのでしょうか? ちなみに件数は毎回1000件前後です。 今は出力するcsvファイルのレイアウトのテーブルcを作成し、 いったん明細テーブルをインポートし、その後顧客テーブルより顧客名称を設定、 その後エクスポートでテーブルcのcsvファイルを出力しています。 あまり余計なテーブルを増やしたくないので 他に良い方法があればと思い質問しました。 よろしくお願いします。

  • ○SQL Server2000○複数テーブルのデータをストアドプロシージャでCSV出力

    SQLServer2000で困っています。 定期的にデータを消す必要のあるテーブルが複数あり、 データを消すストアドプロシージャを作成しました。 しかし、これだけでは不十分で、データを消す前に データをCSV形式などで保存しておきたいと考えて います。 。。。といったことは可能なのでしょうか。 また、別の方法の方がよいといった意見もお願い します。 ツール類がインストールされていないPCなので、 Accessなどは使えません。 よろしくお願いします。

  • DTSでCSVファイルを出力するさいのファイル名変更

    こんにちは、DTS初心者です。 ストアドプロシージャーよりパラメータを渡して DTSを起動しておりますが、 DTSでCSVファイルを出力するさいに、 その指定したパラメータのパスで出力したいのですがうまくいきません。 現状は、 Text File(Destinetion)のプロパティの ファイル名を 「@パラメータ名」としてます。 パラメータ名はグローバル変数として定義してます。 動的にファイル名を変えたいのですが 方法をご存知でしたら教えてください。

  • ストアドから別のストアドを作成できますか?

    パラメータ付きストアドから、そのパラメータを展開したSELECT文のストアドを作成する事は可能でしょうか? アクセスのデータシートビューを表示するにはパラメータがあっても指定出来ないようなんです。 「DoCmd.OpenStoredProcedure」でパラメータ付きのストアドを実行すると、 パラメータ用のインプットボックスが表示されその都度入力しなくてはなりません。 そこで、アクセスから@フィールド名 と @テーブル名 をパラメータとしてストアドを実行し、 ストアドで「SELECT @フィールド名 from @テーブル名」パラメータを展開したSELECT文にして、 別の名前を付けたパラメータ無しのストアドとして登録し、そのストアドを アクセスの「DoCmd.OpenStoredProcedure」で実行すれば、目的のデータシートビューを表示出来ると考えました。 ストアドからストアドを作成できるのでしょうか、可能であれば方法を教えて下さい。