查询返回记录或记录数

时间:2015-07-07 23:58:16

标签: sql-server sql-server-2008-r2

在我们正在构建的应用程序中,在某些情况下,我们希望在仪表板上显示一组仅包含记录计数的指标。当用户点击这些指标时,我们希望显示这些记录。

大多数情况下,计数就足够了,所以我们不想查询数据库并返回实际记录以获取计数。有没有什么可以写一个可以利用相同选择的单个存储过程,但在一种情况下只计算计数,而在其他情况下返回实际记录?

3 个答案:

答案 0 :(得分:4)

您可以通过设置参数并使用您的sproc中的if / case语句处理它来实现此目的。

Create procedure sptest_return (@CountOnly bit = 0)
As Begin
    If @CountOnly = 0 
    Begin
        Select * from test_table
    End
    Else
    Begin
        Select count(*) as [Count] from  test_table
    End
End

如果您将其称为 sptest_return ,则会返回所有行,如果您将其作为参数调用为 sptest_return 1 ,则只会显示行数

希望这有帮助。

答案 1 :(得分:0)

通过存储过程选择数据不是一个好主意。更好地使用UDF,最好使用单语句UDF。

在这种情况下,您可以通过调用

来选择数据
SELECT * FROM dbo.YourFunction(Prm1, Prm2, ...)

这是一个巨大的财富,你也可以这样使用它:

SELECT COUNT(*) FROM (SELECT * FROM dbo.YourFunction(Prm1, Prm2, ...)) AS tbl

查询计划不会执行比查找正确计数所需的更多功能。使用存储过程,这是不可能的......

如果您必须遵守SP方法,请按照之前的建议进行操作。使用参数声明“GetCountOnly”或类似的东西。

HTH

答案 2 :(得分:0)

我认为SP返回不同的结果/多个结果是代码味道之一。因为您需要在运行时以不同的方式处理相同的SP,这很容易出错。

众所周知,SP可以返回一个int值,我们可以使用它:

CREATE sp_GetProjectData(@ReturnEmpty bit = 0)
AS
BEGIN
    DECLARE @Count int = (SELECT COUNT(*) FROM Project)
    -- Always return the table columns, but can be empty
    SELECT * FROM Project WHERE @ReturnEmpty = 0

    -- Return the count, always positive
    RETURN @Count
END