Stored procedures 不根据IF条件返回数据的存储过程

Stored procedures 不根据IF条件返回数据的存储过程,stored-procedures,sql-server-2012,conditional-statements,Stored Procedures,Sql Server 2012,Conditional Statements,我有一个存储过程,在其中检查表是否返回任何行。如果没有返回任何行,则只返回一个空/伪结果集。如果返回行,则返回相同的结果集 这是程序 BEGIN Declare @HAS_ROWS int SELECT @HAS_ROWS(SELECT COUNT(*) AS HAS_ROWS FROM Table1) If(@HAS_ROWS <= 0) BEGIN SELECT TOP 1 NULL FROM Table1 R

我有一个存储过程,在其中检查表是否返回任何行。如果没有返回任何行,则只返回一个空/伪结果集。如果返回行,则返回相同的结果集

这是程序

BEGIN

Declare @HAS_ROWS int
SELECT @HAS_ROWS(SELECT COUNT(*) AS HAS_ROWS FROM Table1)

    If(@HAS_ROWS <= 0)
        BEGIN
            SELECT TOP 1 NULL FROM Table1
            Return
        END
    Else
        BEGIN
            SELECT * FROM Table1
            Return
        END
END

正如您所看到的,它将返回3个结果集,我希望它仅根据IF条件返回。我做错了什么?

@Aaron对@Has\u行的处理是正确的-需要为它分配SELECT@Has\u Rows=。。。或集合@HAS_ROWS=。。。(后者对使用有更多限制)

以下是一个适用于您的固定/简化版本:

BEGIN
    IF((SELECT COUNT(*) FROM Table1) = 0)
        SELECT NULL
    ELSE
        SELECT * FROM Table1

    RETURN
END

尝试从dbo.Table1中选择@HAS_ROWS=COUNT(*)(现在
SELECT@HAS_ROWS
(SELECT COUNT(*)…
是两个独立的查询。)而且,这似乎相当浪费。为什么不编写应用程序代码来处理空结果集而不是伪结果集呢?@AaronBertrand我正在使用SSRS生成报告,所以我需要在一种情况下使用它(客户要求)如果没有记录,则显示一个空行。
BEGIN
    IF((SELECT COUNT(*) FROM Table1) = 0)
        SELECT NULL
    ELSE
        SELECT * FROM Table1

    RETURN
END