简单检查SELECT查询空结果

任何人都可以指出如何检查select查询是否返回非空结果集?

例如,我有下一个查询:

SELECT * FROM service s WHERE s.service_id = ?; 

我应该做下一件事情:

 ISNULL(SELECT * FROM service s WHERE s.service_id = ?) 

testing结果集是否不为空?

使用@@ ROWCOUNT:

 SELECT * FROM service s WHERE s.service_id = ?; IF @@ROWCOUNT > 0 -- do stuff here..... 

根据SQL Server联机丛书 :

返回最后一条语句影响的行数。 如果行数超过20亿,则使用ROWCOUNT_BIG。

 IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?) BEGIN --DO STUFF HERE END 

我同意埃德B.你应该使用EXISTS方法,但更有效的方式来做到这一点是:

 IF EXISTS(SELECT 1 FROM service s WHERE s.service_id = ?) BEGIN --DO STUFF HERE END 

HTH

尝试:

 SELECT * FROM service s WHERE s.service_id = ?; IF @@ROWCOUNT=0 BEGIN PRINT 'no rows!' END 
 SELECT COUNT(1) FROM service s WHERE s.service_id = ? 

总结下面的post有点:

如果你关心的是如果数据库中至less有一个匹配的行,那么使用它是最有效的方式来检查它:只要它发现至less有一个匹配的行,它将返回true,而count等会发现所有匹配的行。

如果实际上需要使用数据进行处理,或者查询有副作用,或者需要知道实际的总行数,那么检查ROWCOUNTcount可能是最好的方法。

 SELECT count(*) as count FROM service s WHERE s.service_id = ?; 

testing如果计数== 0。

更多巴洛克式:

select(SELECT count(*)as count FROM service s WHERE s.service_id =?)= 0 then'No rows,bro!' 否则“你有数据!”结束为stupid_message;

在我的sql使用信息function

 select FOUND_ROWS(); 

它会返回没有。 select查询返回的行

SELECT * FROM服务s WHERE s.service_id =?;

IF @@ rowcount = 0

开始

select“无数据”

结束