任何人都可以指出如何检查选择查询是否返回非空结果集?简单检查SELECT查询空结果
比如我有一个查询:
SELECT * FROM service s WHERE s.service_id = ?;
我应该这样做下一篇:
ISNULL(SELECT * FROM service s WHERE s.service_id = ?)
测试如果结果集是不是空的?
任何人都可以指出如何检查选择查询是否返回非空结果集?简单检查SELECT查询空结果
比如我有一个查询:
SELECT * FROM service s WHERE s.service_id = ?;
我应该这样做下一篇:
ISNULL(SELECT * FROM service s WHERE s.service_id = ?)
测试如果结果集是不是空的?
使用@ @ROWCOUNT:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT > 0
-- do stuff here.....
返回最后一条语句受 影响的行数。如果 行的数量超过20亿,请使用 ROWCOUNT_BIG。
这是安静直接的,我喜欢它。这就是我所期待的。谢谢。 – 2010-05-21 20:37:36
值得注意的是,@@ ROWCOUNT仅在Transact-SQL中可用 – MatrixManAtYrService 2015-09-21 19:35:06
@MatrixManAtYrService:是 - 此问题** IS **关于使用T-SQL的SQL Server .... – 2015-09-21 20:19:26
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
为了提高效率,将'SELECT *'更改为'SELECT TOP 1 *' – 2010-05-21 19:49:18
@Ed B:这并不重要,因为EXISTS在第一次成功匹配时返回true。使用'EXISTS(SELECT 1/0 FROM SERVICE ...')进行测试 - 它应该返回一个不能被0除的分支,但它不会被 – 2010-05-21 20:04:39
@Ed B&@OMG Ponies,是的,我认为SQL Server足够智能优化'EXISTS(SELECT *'或'EXISTS(SELECT 1'或'EXISTS(SELECT 1/0') – 2010-05-21 20:08:50
SELECT count(*) as count FROM service s WHERE s.service_id = ?;
如果测试计数== 0。
更多baroquely:
选择情况下(?SELECT COUNT(*)作为计数从服务中S其中s.service_id =)= 0 然后 '!没有行,兄弟'否则“你有数据“结束的stupid_message;
我跟埃德B.同意你应该使用EXISTS方法,但更有效的方式来做到这一点是:
IF EXISTS(SELECT 1 FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
HTH
If你同意,你应该投票支持这个答案,而不是重新发布相同的内容... – 2010-05-21 19:38:27
@OMG小马:它是不一样的,他把*改成了1. – 2010-05-21 19:44:11
那么,使用“(SELECT TOP 1 * ...”比使用“SELECT 1 ...”更有效率 – 2010-05-21 19:48:06
尝试:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT=0
BEGIN
PRINT 'no rows!'
END
总结文章下方的一点:
如果所有你关心的是,如果至少一个匹配行是在数据库中,然后使用exists
,因为它是最有效的方法来检查它:只要找到至少一个匹配的行,它就会返回true,而count
等将找到所有匹配的行。
如果您确实需要使用数据进行处理,或者查询有副作用,或者您需要知道实际的总行数,那么检查ROWCOUNT
或count
可能是最好的方法。
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
与count(*)的区别是什么? – liang 2013-05-10 00:50:01
SELECT * FROM service s WHERE s.service_id = ?;
IF @@rowcount = 0
begin
select 'no data'
end
在我的SQL使用信息功能
select FOUND_ROWS();
它将返回无。通过select查询返回的行。
您可以通过多种方式来完成。
IF EXISTS(select * from ....)
begin
-- select * from ....
end
else
-- do something
或者你可以使用IF NOT EXISTS , @@ROW_COUNT
像
select * from ....
IF(@@ROW_COUNT>0)
begin
-- do something
end
你到底想干什么?在做检查后你会做什么? – 2010-05-21 19:42:23
不清楚你是否想返回一个结果集,然后检查是否有行是int,或者你只是想检查一个查询是否返回没有结果集的行? – 2010-05-21 19:53:29
我想知道,如果结果集中有任何行。 – 2010-05-21 20:32:01