- PR -

ストアドプロシジャのストアドプロシジャって可能ですか?

1
投稿者投稿内容
ゆうパパ
会議室デビュー日: 2005/04/21
投稿数: 11
投稿日時: 2005-07-14 17:37
いつもお世話になっております。

複数のビューを作成し、ビューを元にしたビューからデータを取得する
プログラムを作成しました。
ところが、処理が遅くなるので、最初に条件指定で対象レコードを
選択してから処理してほしいという依頼が来ました。
ところが、最初の条件指定は画面から入力するもので、動的に変わるので、
最後のビューをプログラムで呼び出す時にときに、Whereで条件指定していました。

最初に選択するということになると、思いつくのはパラメータ付きの
ストアドプロシジャですが、ストアドプロシジャのストアドプロシジャって
できるのでしょうか?試しにやってみたのですが、うまくいきません。
実行時に
  'System.Data.SqlClient.SqlException' のハンドルされていない例外が
  system.data.dll で発生しました。
   追加情報 : システム エラーです。
というエラーがでます。
ストアドプロシジャのストアドプロシジャって可能なのでしょうか?

また可能だとしても、パラメータはどこであたえるのでしょうか?
実際に読み込むのは最後のストアドプロシジャになるのに、
最初のストアドプロシジャにパラメータを与えることになりますよね〜。
こんなことって不可能なのでしょうか?

ちなみに、試しにやってみたプログラムは
Dim wsql As String = "s_Test2"
Dim selectcmd As SqlCommand = New SqlCommand(wsql, cn)
selectcmd.CommandTimeout = 15
selectcmd.CommandType = CommandType.StoredProcedure
Dim dadpt As SqlDataAdapter = New SqlDataAdapter(selectcmd)
Dim rsw As DataSet = New DataSet
dadpt.Fill(rsw)
MsgBox(rsw.Tables(0).Rows.Count)
MsgBox(rsw.Tables(0).Rows(0)("Keiyaku_No"))
です。
ストアドプロシジャは
 CREATE PROCEDURE s_Test1 AS
 SELECT *FROM Seikyu_TR
 GO

 CREATE PROCEDURE s_Test2 AS
 Select * FROM s_Test1
 GO
の2つです。

どなたかご存知の方、おられましたら、ぜひ。お教えください。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-07-14 18:07
引用:

ゆうパパさんの書き込み (2005-07-14 17:37) より:

ストアドプロシジャのストアドプロシジャって可能なのでしょうか?



言葉の意味がわかりません。
ストアドプロシージャ内で別のストアドプロシージャを使用することが
可能ですか?
って聞いていますか?


引用:

 CREATE PROCEDURE s_Test1 AS
 SELECT *FROM Seikyu_TR
 GO

 CREATE PROCEDURE s_Test2 AS
 Select * FROM s_Test1
 GO
の2つです。


ってかかれているのですが、DBMSは何を使用されています?
ゆうパパ
会議室デビュー日: 2005/04/21
投稿数: 11
投稿日時: 2005-07-14 18:17
作成したストアドプロシジャを元に(FROMで使用)ストアドプロシジャを作成して
実行することが可能かということです。ビューでは可能ですよね。
ちなみにDBはSQL-Server2000です。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-07-14 18:29
引用:

ゆうパパさんの書き込み (2005-07-14 18:17) より:
作成したストアドプロシジャを元に(FROMで使用)ストアドプロシジャを作成して
実行することが可能かということです。ビューでは可能ですよね。
ちなみにDBはSQL-Server2000です。


http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_fa-fz_4ox9.asp

SQLServerでFromに指定できるものが書いてあります。

------------------------
以下投稿後追加。

ストアドを作って、プログラムからコールしたいって話ですか?
ただ、ストアドは行配列を返してもらうイメージで作成して、ストアド実行することで
得たいデータ群を取りたい・・・って感じです?
だとしたら私かなぁり読み間違えました。すみません。

[ メッセージ編集済み 編集者: 夏椰(かや) 編集日時 2005-07-14 18:36 ]
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-07-15 09:00
ゆうパパさん、お早うございます。

引用:

作成したストアドプロシジャを元に(FROMで使用)ストアドプロシジャを作成して
実行することが可能かということです。ビューでは可能ですよね。
ちなみにDBはSQL-Server2000です。


『ちなみに』じゃなくて、「DBMSは何か」「バージョンはいくつか」によって、『可能』な事は変わってくるんですから、そういう事は最初に明記しましょう。

ちなみに、SQLServer 2000 では、テーブル型を返す関数が使えますので、以下のような使い方が出来ます。

コード:
select
  column1, column2, column3
from
  my_function(param1, param2)
inner join
  table1
on .......


1

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