有人能指出如何检查选择查询是否返回非空结果集吗?
例如,我有下一个问题:
SELECT * FROM service s WHERE s.service_id = ?;
我应该像下面这样做吗:
ISNULL(SELECT * FROM service s WHERE s.service_id = ?)
测试结果集是否为空?
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?) BEGIN --DO STUFF HERE END
SELECT count(*) as count FROM service s WHERE s.service_id = ?;
测试 count = = 0。
更具巴洛克风格:
选择 case when (SELECT count (*) as count FROM service s WHERE s.service _ id = ?) = 0 然后是“没有行,兄弟!”或者“你有数据!”结尾是愚蠢的消息;
我同意 Ed B。你应该使用 EXISTS 方法,但是更有效的方法是:
IF EXISTS(SELECT 1 FROM service s WHERE s.service_id = ?) BEGIN --DO STUFF HERE END
高温
使用@@ ROWCOUNT:
SELECT * FROM service s WHERE s.service_id = ?; IF @@ROWCOUNT > 0 -- do stuff here.....
根据 SQLServer 联机丛书:
所影响的行数 最后一句。如果 行超过20亿,使用 ROWCOUNT _ BIG.
尝试:
SELECT * FROM service s WHERE s.service_id = ?; IF @@ROWCOUNT=0 BEGIN PRINT 'no rows!' END
对以下职位作一点总结:
如果你所关心的只是数据库中是否至少有一个匹配行,那么使用 exists,因为它是检查这个的最有效的方法: 只要它找到至少一个匹配行,它就会返回 true,而 count等会找到所有匹配行。
exists
count
如果您实际上需要使用数据进行处理,或者查询有副作用,或者如果您需要知道实际的总行数,那么检查 ROWCOUNT或 count可能是最好的方法。
ROWCOUNT
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
SELECT * FROM service s WHERE s.service_id = ?; IF @@rowcount = 0 begin select 'no data' end
在我的 sql 中使用信息函数
select FOUND_ROWS();
它将返回由选择查询返回的行数。
你可以用很多方法来做。
IF EXISTS(select * from ....) begin -- select * from .... end else -- do something
或者你可以像
select * from .... IF(@@ROW_COUNT>0) begin -- do something end
SELECT count(*) as CountThis ....
然后你可以像下面这样把它比作字符串:
IF CHECKROW_RS("CountThis")="0" THEN ...
CHECKROW_RS是一个对象
CHECKROW_RS
有一种方法可以多写一点代码,但是非常有效
$sql = "SELECT * FROM messages"; //your query $result=$connvar->query($sql); //$connvar is the connection variable $flag=0; while($rows2=mysqli_fetch_assoc($result2)) { $flag++;} if($flag==0){no rows selected;} else{ echo $flag." "."rows are selected" }