Подтвердить что ты не робот

Простая проверка для результата запроса SELECT

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

 END

Ответ 3

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

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

END

НТН

Ответ 4

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

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

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

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

IF @@ROWCOUNT=0
BEGIN
    PRINT 'no rows!'
END

Ответ 6

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

Ответ 7

SELECT * FROM service s WHERE s.service_id = ?;
IF @@rowcount = 0
begin
select 'no data'
end

Ответ 8

Чтобы кратко изложить следующие сообщения:

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

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

Ответ 9

SELECT count(*) as CountThis....

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

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

CHECKROW_RS - это объект

Ответ 10

SELECT count(*) as count FROM service s WHERE s.service_id = ?;

test, если count == 0.

Больше baroquely:

select case when (SELECT count (*) как count FROM service s WHERE s.service_id =?) = 0  затем "Нет строк, брат!" иначе "У вас есть данные!" заканчивается как stupid_message;

Ответ 11

В моей служебной информационной функции sql

select FOUND_ROWS();

он вернет no. строк, возвращаемых выбранным запросом.

Ответ 12

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

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