简单检查 SELECT 查询空结果

有人能指出如何检查选择查询是否返回非空结果集吗?

例如,我有下一个问题:

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

我应该像下面这样做吗:

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

测试结果集是否为空?

315001 次浏览
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等会找到所有匹配行。

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

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是一个对象

有一种方法可以多写一点代码,但是非常有效

$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"
}