Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择查询空结果的简单检查_Sql_Sql Server_Database - Fatal编程技术网

Sql 选择查询空结果的简单检查

Sql 选择查询空结果的简单检查,sql,sql-server,database,Sql,Sql Server,Database,有人能指出如何检查select查询是否返回非空结果集吗 例如,我有下一个查询: 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

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

例如,我有下一个查询:

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
如果计数=0,则进行测试

更加巴洛克式:

从服务s中选择计数*作为计数时选择案例,其中s.service_id=?=0
然后“别吵架,兄弟!”否则你就有数据了!以愚蠢的信息结束

我同意Ed B。你应该使用EXISTS方法,但更有效的方法是:

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

END
HTH

使用@@ROWCOUNT:

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

IF @@ROWCOUNT > 0 
   -- do stuff here.....
根据:

返回受影响的行数 最后一句话。如果 行数超过20亿,请使用 行数大

尝试:


对以下帖子进行一点总结:

如果您关心的只是数据库中是否至少有一个匹配行,那么use exists是最有效的检查方法:它将在找到至少一个匹配行时返回true,而count等将找到所有匹配行


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

在我的sql使用信息函数中

SELECT COUNT(1) FROM service s WHERE s.service_id = ?
select FOUND_ROWS();

它将返回select查询返回的行数。

您可以通过多种方式执行此操作

IF EXISTS(select * from ....)
begin
 -- select * from .... 
end
else
 -- do something 
或者,如果不存在,可以使用。@@ROW\u COUNT like

选择count*作为CountThis

然后可以将其作为字符串进行比较,如下所示:

IF CHECKROW_RS("CountThis")="0" THEN ...

CHECKROW\u RS是一个对象

有一种方法可以多编写一点代码,但确实有效

$sql=从消息中选择*//你的问题 $result=$connvar->query$sql//$connvar是连接变量 $flag=0; 而$rows2=mysqli\u fetch\u assoc$result2 {$flag++;} 如果$flag==0{未选择任何行;} 否则{ echo$flag..已选择行

}如果你同意,你应该投票支持这个答案。而不是转发相同的内容…@OMG Ponies:这是不一样的。他将*改为1。好吧,使用SELECT TOP 1*。。。将比使用SELECT 1更有效…我使用SET SHOWPLAN_ALL ON为IF EXISTS SELECT*FROM获取相同的查询计划。。。如果存在,则从相同的结果中选择1,因为RDBMS隐式优化次优查询。就我的口味而言,这个答案更简洁,不依赖于优化。在幕后什么都不做,也不需要查询优化方面的知识。你想做什么?在进行检查后,下一步将做什么?不清楚您是否希望返回结果集,然后检查是否有任何行被整型,或者您是否只想检查查询是否返回没有结果集的任何行??我想知道,如果结果集中有任何行。请将“选择*”更改为“选择前1*”efficiency@Ed没关系,因为EXISTS在第一次成功匹配时返回true。使用现有的测试从服务中选择1/0…-它应该返回a,不能除以零,但不会t@Ed是的,我认为SQL Server足够聪明,可以优化EXISTS SELECT*或EXISTS SELECT 1或EXISTS SELECT 1/0away@OMG小马,@KM-我告诉我的开发人员使用Select 1的唯一原因是为了简化搜索以挤压Select*的使用。此外,我在SQL Server cough Access cough之外的数据库中遇到了效率问题,因为某些愚蠢的原因,它对Select子句做了一些操作。我可以注意到,当您只想测试它是否为空而不返回结果集时,这比接受的答案要好,例如,如果在一个存储过程中,您还不想返回一个结果。这很简单,我喜欢。这就是我要找的。谢谢。值得注意的是@@ROWCOUNT仅在Transact中可用-SQL@MatrixManAtYrService:是-此问题与使用T-SQL的SQL Server有关…字段值为NULL,但@@ROWCOUNT返回1!困惑:|当然返回1!如果有一行被返回,那么该行的列是什么样子并不重要。具有空值的列可能是有价值的信息。与count*有任何差异吗?
select FOUND_ROWS();
IF EXISTS(select * from ....)
begin
 -- select * from .... 
end
else
 -- do something 
select * from ....
IF(@@ROW_COUNT>0)
begin
-- do something
end
IF CHECKROW_RS("CountThis")="0" THEN ...
SELECT * FROM service s WHERE s.service_id = ?;
BEGIN
   print 'no data'
END