如果0返回所有行,则根据发送的输入返回N行数

时间:2018-01-22 06:55:58

标签: sql sql-server-2008

我要求将要返回的行数作为参数传递。即从表中我必须根据输入参数返回行。

如果是5,则显示前5行。但是如果发送0,则必须显示所有行。

Create Procedure Get_Employee
    @Input int
As
Begin
    select top @Input * 
    from employee
End

请帮助我,我不能依赖于标识栏,因为我们可能需要删除其中的几行。

1 个答案:

答案 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