2

変更できないストアド プロシージャがあります。ストアド プロシージャを書き直すか、ストアド プロシージャ内からクエリを関数に追加することを提案する前に、これを強調します。

この手順は、アクセスが非常に制限されている別のデータベースにあります。だから私がやりたいことは、ストアド プロシージャをクエリ関数、またはストアド プロシージャにラップして、返されたデータから上位 N 行を選択できるようにすることです。

理想的には、次のようなものを呼び出すことができます...

DECLARE @ForeName varchar(50)
DECLARE @Surname varchar(50)
DECLARE @DOB datetime
DECLARE @Sex varchar(1)

SET @Surname = 'Smith'

SELECT TOP 10 (
   EXECUTE @RC = [Some_Other_Database].[dbo].[sp_search_demographics] 
     ,@ForeName
     ,@Surname
     ,@DOB
     ,@Sex
)
GO

編集:(ストアドプロシージャは、行数と行数を含むパラメーターを返すことにも注意してください)

edit2: MS SQL Server 2008 R2 を使用していることにも注意してください。

これが決して正しくないことは承知していますが、このようなことを行う方法はありますか? あいまいなクエリの場合、現時点では数千行が返されています。これにより、サーバーが大幅に遅くなります。

私は解決策のためにいくつかのグーグルとスタックオーバーフローを行いましたが、残念ながら私が見つけることができるすべてのアドバイスは、ストアドプロシージャの変更に関するものでした.

4

2 に答える 2

3

EXEC SP_EXECUTESQL(@SQL)を検索します。ただし、問題は、呼び出されたspが引き続きすべての行を返すため、探しているパフォーマンスが向上しない可能性があることです。クエリによって返される行数を設定することもできますが、アクセスレベルによって異なります http://blog.sqlauthority.com/2007/04/30/sql-server-set-rowcount-retrieveing-or-limiting-the -first-n-records-from-a-sql-query/ これがお役に立てば幸いです

于 2012-07-13T13:31:54.773 に答える