我要求将要返回的行数作为参数传递。即从表中我必须根据输入参数返回行。
如果是5,则显示前5行。但是如果发送0,则必须显示所有行。
Create Procedure Get_Employee
@Input int
As
Begin
select top @Input *
from employee
End
请帮助我,我不能依赖于标识栏,因为我们可能需要删除其中的几行。
答案 0 :(得分:1)
首先,在不使用top x
的情况下使用order by
意味着您基本上从表中选择x任意记录(请注意,任意记录与随机记录不同)。
有关更多信息,请阅读Aaron Bertrand的Bad habits to kick : relying on undocumented behavior.
其次,最简单的解决方案是将0
替换为存储过程中表中的行数:
Create Procedure Get_Employee
@Input int
As
Begin
if @Input <= 0 begin -- Note: handling a negative input like it's zero...
set @Input = (select count(*) from employee)
end
select top (@Input) *
from employee
order by Id -- or whatever column you want use to order by
End