假设我有一个返回多行的存储过程,但我想使用 TOP 或其他东西来限制行数。是否可以在不创建另一个存储过程来更新现有存储过程的情况下动态执行此操作?
所以我的 sp 看起来像这样:
create procedure [dbo].[myproc]
@param1 int
as
begin
select sumthing
from mytable
where mycolumn=2
end
如何在此 sp 中添加另一个参数,并在需要时使其可选以限制行数?
假设我有一个返回多行的存储过程,但我想使用 TOP 或其他东西来限制行数。是否可以在不创建另一个存储过程来更新现有存储过程的情况下动态执行此操作?
所以我的 sp 看起来像这样:
create procedure [dbo].[myproc]
@param1 int
as
begin
select sumthing
from mytable
where mycolumn=2
end
如何在此 sp 中添加另一个参数,并在需要时使其可选以限制行数?
像这样:
create procedure [dbo].[myproc]
@param1 int,
@optionalRowcount int = 999999999999
as
begin
select TOP(@optionalRowcount) sumthing
from mytable
where mycolumn=2
end
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
您可以使用 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