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?
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.
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
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
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
versuchen:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT=0
BEGIN
PRINT 'no rows!'
END
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
SELECT * FROM service s WHERE s.service_id = ?;
IF @@rowcount = 0
begin
select 'no data'
end
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.
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
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"
}
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;
Verwenden Sie in meiner SQL-Informationsfunktion
select FOUND_ROWS();
es wird das Nein zurückgeben. der von select-Abfrage zurückgegebenen Zeilen.