简单检查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
等会发现所有匹配的行。
如果实际上需要使用数据进行处理,或者查询有副作用,或者需要知道实际的总行数,那么检查ROWCOUNT
或count
可能是最好的方法。
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“无数据”
结束