人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLServer2000のストアドに関連して質問です。
分かる人だけ、回答してください。


ストアドプロシージャST1は、テーブルのデータ(テーブルセット)を返すストアドです。

別のストアドで、一時テーブルの中にこのST1の結果を代入したくて、
select * into #tmpTable
from ST1
と書いても、この箇所が構文エラーになります。

一時テーブルの中にストアドの結果テーブルを代入するにはどうしたらいいのでしょうか?


ヘルプなどを見ましたが、それなりに回りくどいやりかたであればできるようなのです。
しかし、上記を実現するための、できるだけ簡単な方法を教えてください。

納得できる回答を最初にいただいた方に、ポイントをすべて配分したいと思っています。
よろしくお願いします。

●質問者: auction
●カテゴリ:コンピュータ
✍キーワード:SELECT エラー データ プロ ヘルプ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● akibare
●25ポイント

http://dbforums.com/t436979.html

Use Execute subquery in Select of Stored Procedure? - dBforums

ST1の結果のテーブル構造がわかっている場合は割と簡単です。そのテーブル構造と同じ一時テーブルを定義してからINSERTをすればよいのです。


例)


create procedure spz_hoge as

select type from syscharsets

go


create table #hoge

(

type smallint not null

)

go


INSERT #hoge EXEC spz_hoge

go


select * from #hoge

http://www.google.com.au/

Google

もし構造が実行時まで不明であれば、おそらく「回りくどいやりかた」にあたる、カーソルをゲットしてからループ処理をする、という解決方法になります

◎質問者からの返答

回答ありがとうございます。

実はこのやりかたはヘルプで見たのですが、コレ自体が回りくどいやりかたなんです。

↑ 私はそう考えてます。先に書いておくべきでしたね。

というのも、このやりかただと、ストアドの出力テーブルの仕様が変われば、そのストアドを呼び出す前に定義する一時テーブル(上記の例だと#hoge)の定義も全て書き直さなければなりません。

メンテナンスの面で、やっかいな問題を抱えています。

<ちょっと背景を述べますと>

一般のプログラミングにおいて、一つのおおきな処理を、機能ごとに複数のメソッドに分けて処理させたりしますよね。コードの読みやすさや、メンテナンスの容易さを重視したり、メソッドを各所で再利用したい時に取られる方法の一種です。

これと同じように、ある大きな処理をするストアドを1個書くのではなくて、機能ごとに複数のストアドに分割して実行させたいのです。

このとき、上記の問題にぶちあたったのです。


2 ● akibare
●25ポイント

http://msdn.microsoft.com/

MSDN Home Page

2回目の回答で失礼。TSQLで内部で機能を分割する場合はprocedureではなくてfunctionとかviewを使います。単純なselect文であればviewを、複雑な処理はfunctionで。


例)


create function fn_hoge ()

returns table

as

return (

select type from syscharsets

)

go


select * into #hoge from fn_hoge()

go


select * from #hoge

go

◎質問者からの返答

関数(ユーザー定義関数のことですよね)ですか・・・

存在は知ってましたが、つかったことはないんです。

関数に関してヘルプを見てましたが・・・ビューでできることは全て関数で実現できる、そしてストアドでできることは全て関数で実現できるって認識でよいのでしょうか?

「インライン ユーザー定義関数」と「table 型を返すユーザー定義関数」は、似て非なるものなのでしょうか? それとも、まったく同等のものなのでしょうか?

既存のストアドを全部関数で書き換え、今後は関数で全て運用していけば、問題はバッチリ解決できるでしょうか?

手元に40近いストアドがあるのですが(これを機能ごとに分割して再書き換えする予定)、書き換えに伴う対費用効果とかも考えないといけません。

このあたりの問題もあるので、関数をつかうなら事前に十分な検討が必要になりそうです。

引き続き、一時テーブルにストアドの出力内容を保存する方法、ならびに関数に関する情報をお待ちします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ