Простая проверка пустого результата запроса SELECT - PullRequest
55 голосов
/ 21 мая 2010

Может ли кто-нибудь указать, как проверить, возвращает ли запрос на выборку непустой набор результатов?

Например, у меня следующий запрос:

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

Должен ли я сделать что-то вроде следующего:

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

проверить, не является ли набор результатов пустым?

Ответы [ 12 ]

91 голосов
/ 21 мая 2010
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?)
 BEGIN
   --DO STUFF HERE

 END
70 голосов
/ 21 мая 2010

Используйте @@ ROWCOUNT:

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

IF @@ROWCOUNT > 0 
   -- do stuff here.....

Согласно Электронная документация по SQL Server :

Возвращает количество строк, затронутых последнее утверждение. Если количество строк больше 2 миллиардов, используйте ROWCOUNT_BIG.

9 голосов
/ 21 мая 2010

Я согласен с Эдом Б. Вы должны использовать метод EXISTS, но более эффективный способ сделать это:

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

END

НТН

7 голосов
/ 07 декабря 2017

Вы можете сделать это несколькими способами.

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
5 голосов
/ 21 мая 2010

попробовать:

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

IF @@ROWCOUNT=0
BEGIN
    PRINT 'no rows!'
END
3 голосов
/ 21 мая 2010
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
2 голосов
/ 09 июня 2014
SELECT * FROM service s WHERE s.service_id = ?;
IF @@rowcount = 0
begin
select 'no data'
end
1 голос
/ 11 февраля 2019

SELECT count(*) as CountThis ....

Тогда вы можете сравнить это как строку так:

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

CHECKROW_RS это объект

1 голос
/ 21 мая 2010

Для краткого изложения нижеприведенных постов:

Если все, что вас волнует, это если хотя бы одна совпадающая строка находится в БД, тогда используйте exists, так как это наиболее эффективный способ проверить это: он вернет true, как только найдет хотя бы одну совпадающую строку, тогда как count и т. Д. Найдет все подходящие строки.

Если вам действительно нужно использовать данные для обработки, или если у запроса есть побочные эффекты, или если вам нужно знать фактическое общее количество строк, то проверка ROWCOUNT или count, вероятно, является наилучшим способом под рукой. .

0 голосов
/ 20 мая 2019

ну, есть способ сделать это немного больше кода, но действительно эффективно

$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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...