2013-10-22 31 views
1

說我有一個存儲過程返回一些行,但我想限制使用TOP或其他行的數量。是否有可能動態執行此操作,而無需創建另一個存儲過程來更新現有存儲過程來執行此操作?是否可以將行計數限制添加到現有存儲過程中的查詢中?

所以我的SP看起來是這樣的:

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

如何我可以添加其他參數去這個SP並使其可選限制的行數,當我需要這個?

回答

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 
2

行數的選擇可能是解決這個問題的選擇方案最簡單的方法,但我也只是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 
+0

因爲這不是一個刪除,插入或更新,我覺得沒有危險在此上下文中使用的行數不被棄用。 –

4

像這樣:

create procedure [dbo].[myproc] 
    @param1 int, 
    @optionalRowcount int = 999999999999 
as 
begin 
select TOP(@optionalRowcount) sumthing 
from mytable 
where mycolumn=2 
end 
+0

這是最乾淨的,併爲正確的語法'TOP(@Var)+雙+ –

相關問題