2

行数を返すストアド プロシージャがあるが、TOP などを使用して行数を制限したいとします。これを行うために既存のストアド プロシージャを更新する別のストアド プロシージャを作成せずに、これを動的に行うことは可能ですか?

私のspは次のようになります:

create procedure [dbo].[myproc]
@param1 int
as
begin
 select sumthing
 from mytable
 where mycolumn=2
end

このspに別のパラメータを追加して、必要なときに行数を制限するオプションにするにはどうすればよいですか?

4

3 に答える 3

6

このような:

create procedure [dbo].[myproc]
    @param1 int,
    @optionalRowcount int = 999999999999
as
begin
 select TOP(@optionalRowcount) sumthing
 from mytable
 where mycolumn=2
end
于 2013-10-22T23:55:18.050 に答える
2

行数オプションは、おそらく SELECT シナリオでこれを解決する最も簡単な方法ですが、 MSDNページで、DELETE、INSERT、および UPDATE の将来のリリースで行数が廃止される可能性があることに気付きました。したがって、誰かにとって役立つ場合に備えて、この代替案をここに投稿します。

create procedure [dbo].[myproc]
@param1 int = null
as
begin
    if @param1 is null
        select * from myTable
    else
        select top (@param1) *
        from myTable 
end
于 2013-10-22T23:53:59.350 に答える
1

set rowcount オプションを使用できます。@MaxRowCount = 0 の場合、すべての行が返されます。それ以外の場合、行数は @MaxRowCount の値に制限されます。

create procedure [dbo].[myproc]
@param1 int, @MaxRowCount Int
as
begin

 Set rowcount @MaxRowCount

 select sumthing
 from mytable
 where mycolumn=2

 set rowcount 0

end
于 2013-10-22T23:43:55.523 に答える