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