2009-04-06 18 views
4

これは可能ですか?私は私のソースのストアドプロシージャにいくつかのフィルターを設定しているので、実際には行数を取得するために別のフィルターでそれを複製する必要はありません。別のストアドプロシージャの行数を返すためのストアドプロシージャの作成

+0

あなたは例を挙げることができますか?あなたはsprocに電話をかけて、結果を数えてみることができますか? – Robert

答えて

6

私がこれを行う方法を知っている唯一の方法は、ストアドプロシージャから一時テーブルに挿入し、カウントを選択することです。残念ながら、ストアドプロシージャで「選択」を実行する方法はありません。

CREATE TABLE #stuff (id int, status char(6)) 
INSERT #stuff (id, status) 
EXEC dbo.sp_get_stuff 

SELECT count(*) FROM #stuff 

DROP TABLE #stuff 

編集

上記の方法は、あなたがストアドプロシージャから選択することができますが、グレッグは指摘したように、行数をに簡素化することができます。また、これは動作します

EXEC dbo.sp_get_stuff 
SELECT @@Rowcount 
+0

これは私が探していたものだと思います。私にそれを渦にしてみましょう... –

+5

@@ ROWCOUNTがうまく動作し、パフォーマンスオーバーヘッドが実質的にゼロで、使用するのがはるかに簡単な場合、なぜテンポラリテーブルを使用しますか? –

+0

@Greg - あなたは正しい –

3

create proc pTest1 
as 
select * from comp 
go 

create proc pTest2 
as 
exec pTest1 
select @@rowcount 
GO 
+0

結果と行数の両方を返すのではなく、行数だけを返す方法はありますか?私は可能な限りこれを微調整しようとしています。ありがとう! –

+0

LFSRのようにローカルテーブルで結果セットをキャッチすることは簡単にできません。こちらも参照してください。http://stackoverflow.com/questions/605996/ms-sql-suppress-return-value-of-stored-procedure-called-in-stored-procedure – edosoft

+0

上記のコードの意味で「何か」は何を意味しますか? – anjanb

1

本当に細かいことをしようとしている場合できるだけ多くの場合、ソースストアドプロシージャを変更する必要があります。あなたがパフォーマンスを見ているなら、単に行数を返すことは考慮すべきことではありません。

+0

あなたは正しいです。私はトンネルビジョンを持っていた。 –

+1

そこには、それを行った! –

関連する問題