web-dev-qa-db-de.com

Einfache Prüfung auf leeres Ergebnis der SELECT-Abfrage

Kann jemand zeigen, wie überprüft wird, ob eine Auswahlabfrage eine nicht leere Ergebnismenge zurückgibt?

Zum Beispiel habe ich die nächste Abfrage:

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

Soll ich so etwas weiter machen:

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

testen, ob die Ergebnismenge nicht leer ist?

47
Denys S.

Verwenden Sie @@ ROWCOUNT:

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

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

Laut SQL Server-Onlinedokumentation :

Gibt die Anzahl der Zeilen zurück, die von .__ betroffen sind. die letzte Aussage Wenn die Anzahl von Zeilen sind mehr als 2 Milliarden, verwenden Sie ROWCOUNT_BIG.

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

 END
88
Ed B

Ich stimme mit Ed B überein. Sie sollten die EXISTS-Methode verwenden.

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

END

HTH

8
Raja

Sie können es auf verschiedene Arten tun.

IF EXISTS(select * from ....)
begin
 -- select * from .... 
end
else
 -- do something 

Oder Sie können IF NOT EXISTS , @@ROW_COUNT like verwenden 

select * from ....
IF(@@ROW_COUNT>0)
begin
-- do something
end
7
Samim Hussain

versuchen:

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

IF @@ROWCOUNT=0
BEGIN
    PRINT 'no rows!'
END
5
KM.
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
2
ovais.tariq
SELECT * FROM service s WHERE s.service_id = ?;
IF @@rowcount = 0
begin
select 'no data'
end
1

Um die untenstehenden Beiträge etwas zusammenzufassen:

Wenn Sie sich nur darum kümmern, wenn sich mindestens eine übereinstimmende Zeile in der Datenbank befindet, verwenden Sie exists, da dies die effizienteste Methode ist, um dies zu überprüfen: Sie wird true zurückgeben, sobald mindestens eine übereinstimmende Zeile gefunden wird, während count, usw. findet alle übereinstimmenden Zeilen.

Wenn Sie die Daten tatsächlich für die Verarbeitung verwenden müssen oder wenn die Abfrage Nebenwirkungen hat oder wenn Sie die tatsächliche Gesamtzahl der Zeilen kennen müssen, ist das Prüfen von ROWCOUNT oder count wahrscheinlich der beste Weg Hand.

1
Donnie

SELECT count(*) as CountThis ....

Dann können Sie es wie folgt als Zeichenfolge vergleichen:

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

CHECKROW_RS ist ein Objekt

1
csandreas1

nun, es gibt eine Möglichkeit, etwas mehr Code zu schreiben, aber wirklich effektiv

$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"
}
0
SELECT count(*) as count FROM service s WHERE s.service_id = ?;

test, ob count == 0.

Baroquely:

fall auswählen, wenn (SELECT count (*) as count FROM Dienst s WHERE s.service_id =?) = 0. dann "Keine Reihen, Bruder!" sonst 'Du hast Daten!' end als stupid_message;

0
tpdi

Verwenden Sie in meiner SQL-Informationsfunktion 

select FOUND_ROWS();

es wird das Nein zurückgeben. der von select-Abfrage zurückgegebenen Zeilen.

0
Sunil Kumar