- - PR -
関数の引数にストアドプロシージャを指定する
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-04-15 12:19
SQL Server2005を使用しています。
関数の引数にストアドプロシージャを指定する方法はあるのでしょうか? たとえば、以下のような方法です。(実行すると「不適切な構文」エラーになります) select count(*) from (ストアドプロシージャ名) as tmp 目的としては、ストアドプロシージャを作成し、 それを単に実行する場合と、実行時の行数を取得する場合の2パターンの 処理を行いたいと思っています。 ストアドプロシージャ内にカウント関数を持ち、カウントするかしないかをIF文で記述して分ける方法も考えたのですが、既にある処理が冗長なので、できればこれ以上複雑にしたくないと思っています。 また、戻り値から行数を取得する方法では、selectの実行結果も合わせて返ってくるため、ネットワークが重くなるかと思っています。 よろしくお願いします。 | ||||||||
|
投稿日時: 2009-04-15 13:04
「テーブル値関数」がベストかと思います。
○ 件数を取る場合 SELECT COUNT(*) FROM hogehogefnc() ○ データを取る場合 SELECT * FROM hogehogefnc() こんな感じで書けます 詳しくはMSDNを http://msdn.microsoft.com/ja-jp/library/ms191165.aspx _________________ Toshiya Tsuru http://d.hatena.ne.jp/turutosiya/ | ||||||||
|
投稿日時: 2009-04-15 15:02
>turutosiyaさん
ありがとうございます。 確かに、非常に有用な手段のようですね。 ただ、調べたところテーブル値関数にはデータ量の制限があるらしく、これがネックになる可能性もあるかもしれないと思いました。 また、既に作成済みの多くのストアドプロシージャをなるべく変更したくないので、あくまでストアドプロシージャを使うことを考えたいと思っています。 となると、やはり、ストアドプロシージャ内でカウント関数をもたせるしかないのかもしれませんね…。 もし他に方法があるようでしたら、引き続きご教授いただきたいと思います。 | ||||||||
|
投稿日時: 2009-04-16 14:07
つれづれなるままに考えて、思い浮かんだ案を一つ。
1. ストアドにパラメータ(@CountOnly)を追加 2. 既存のストアドでSELECTしているデータを一時テーブルに入れるように変更(INTO 句を追加) 3. @CountOnlyにより、件数を返すか、データを返すかを切りかえる というのではどうでしょう?
これは知りませんでした。差し支えなければソースを教えて頂けませんか? _________________ Toshiya Tsuru http://d.hatena.ne.jp/turutosiya/ [ メッセージ編集済み 編集者: turutosiya 編集日時 2009-04-16 14:18 ] | ||||||||
|
投稿日時: 2009-04-17 22:47
>turutosiya
ありがとうございます! すでに実装を始めていたのですが、それよりも見た目もすっきりしてますし、 SELECT文を複数に分けている分、スピードも上がりそうです。 >これは知りませんでした。差し支えなければソースを教えて頂けませんか? 前提知識が欠けているため、間違った解釈をしていたら申し訳ありませんが… 以下になります。 http://japan.internet.com/column/developer/20061025/27.html |
1