- PR -

一時テーブルについて

1
投稿者投稿内容
Moto
会議室デビュー日: 2005/01/17
投稿数: 2
投稿日時: 2005-01-17 15:03
はじめまして。
C#初心者です。
SQLサーバを使用し、
テーブルからデータを取得し@、そのデータをもとに、
SUMしたり、別テーブルのデータと結合したりして
新規のデータAを作らなければいけません。
データ件数は最初に取得した@時点で30万件以上あり、
そのほとんどが次に加工したり、結合したりするAに使用されます。
加工したりするのでデータセットは使用できません。
@のデータも、Aのデータも別に使用するのですが、
こういった場合、何を使用すればよろしいのでしょうか。
現在、考えている方法は、SQLサーバの一時テーブルを使用するという
方法ですが、それ以外によい方法がありましたらご教示願えないでしょうか。


さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2005-01-17 15:59
はじめまして,さかもとと申します。

具体的な加工内容等が分かっているわけではないのですが,
30万件くらいのデータを元に一括で加工(テーブル作成とか)
をするのであればストアドプロシージャ内で一時テーブルを作成
して利用するのが楽なのではないかと思うのですが,如何でしょうか?

(私自身も初心者レベルなので相乗り質問に近いのですが・・・)

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-01-17 16:10
引用:

現在、考えている方法は、SQLサーバの一時テーブルを使用するという
方法ですが、それ以外によい方法がありましたらご教示願えないでしょうか。



やはり、ストアドでしょう
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-01-17 22:29
 なぜDataSetは使えないのでしょう?DataSetを加工できますよ。また、そこから別のテーブルの新規行にすることも可能です。要はやり方次第です。

コード:
DataSetにDatabaseからデータを読み込む
DataTableを加工する ←ここまでは出来るんですよね
INSERT文でDbCommandを作成する
DataTableを上から1行ずつ繰り返し
 DbCommandを実行する
不要になったリソースを解放する


確かに1つのDataAdapterにInsertCommand, DeleteCommand, UpdateCommand, SelectCommandを構成して、Updateメソッドを実行するような使い方は出来ません。だからといってDataSetが使えないわけではありません。『加工したりするのでデータセットは使用できません』というより、メモリ的に使用しない方が良さそうですけど。
 加工の仕様が不明ですが、加工が1行単位に完了するなら、DataReaderを使って1行ずつ処理するという方法もあります。もっとも、DBとのラウンドトリップ回数を考えると、ストアドプロシージャにする方がよいのですが。

_________________
Moto
会議室デビュー日: 2005/01/17
投稿数: 2
投稿日時: 2005-01-18 09:53
みなさん、ご返答ありがとうございました。
やはり、ストアドプロシージャを使うのが一番良いようですね。

追加で質問させていただきたいのですが、
今回は、C#.netと、SQLServerを使用するのですが、
ストアドをSQLServerではなく、C#のコーディングに埋め込むことは
可能なのでしょうか。SQLServerから取得したデータを一時テーブルに
取り込んで、クラス間で使いまわしたいと考えています。

どうぞよろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-01-18 21:25
引用:

まつさんの書き込み(2005-01-18 09:53)より:

追加で質問させていただきたいのですが、
今回は、C#.netと、SQLServerを使用するのですが、
ストアドをSQLServerではなく、C#のコーディングに埋め込むことは
可能なのでしょうか。SQLServerから取得したデータを一時テーブルに
取り込んで、クラス間で使いまわしたいと考えています。


 C#のコード中にストアドプロシージャを埋め込むって、具体的にどのようなことですか?ストアドプロシージャがどういうもので、どう使うかを理解していますか?C#のコンパイラには、C#の文法しか理解できません。

 「SQL Serverから取得したデータ」というのは、取得したのは誰でしょう?私の理解では一時テーブルというのはSQL Server上にあるのですが、そこに取り込む?取得して取り込むとは、どういうことでしょう?放り込むじゃなくて?

 テーブル1のデータを加工してテーブル2を生成する処理をストアドプロシージャで行うなら、クラス間で使い回したいデータというのはテーブル1ですか?テーブル2ですか?それとも、加工途中のデータですか?


 ここを読んでいる人はあなたを知らない、と言うことを意識して書いてください。あなたの中では「常識」であっても、他の人にはそうでない場合が多々あります。「説明するのが面倒」とか、「わかるだろう」とか思わず、そうですね、あなたの両親に説明するつもりで書いてください。可能なら、投稿前に実際に投稿文そのままで説明して、「何が聞きたいかわかった?」と尋ねてみてください。職場の同僚でもいいですが、その場合は作業の状況を知らない人の方がいいです。ここを読んでいる人は、たいてい同じ職種でしょうから、好意的に解釈し、暗黙で補完しますが、それにしてもわかりにくいです。そして、結局「面倒」とか「わかるだろう」と思って端折ったところで余計に「面倒」なことが起きます。またはこういう風に質問を重ねられて時間だけが過ぎていくか。これはあなたにとって好ましい状況とは言えないと思いますが、どうでしょうか。
 時間があれば他の人の質問もいくつか読んでみてください。あなたがわからないと思ったことは、たいてい他の人も「これはどういう意味ですか」と聞いているはずです。
_________________
1

スキルアップ/キャリアアップ(JOB@IT)