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

rowcount 选项可能是在 SELECT 场景中解决此问题的最简单方法,但我只是在MSDN页面上注意到 rowcount 可能在未来的 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 回答