Kann jemand darauf hinweisen, wie zu überprüfen ist, ob eine ausgewählte Abfrage eine nicht leere Ergebnismenge zurückgibt?
Zum Beispiel habe ich nächste Abfrage:
SELECT * FROM service s WHERE s.service_id = ?;
Soll ich so etwas wie nächstes machen:
ISNULL(SELECT * FROM service s WHERE s.service_id = ?)
um zu testen, ob die Ergebnismenge nicht leer ist?
sql
sql-server
database
Denys S.
quelle
quelle
Antworten:
Verwenden Sie @@ ROWCOUNT:
SELECT * FROM service s WHERE s.service_id = ?; IF @@ROWCOUNT > 0 -- do stuff here.....
Laut SQL Server Books Online :
quelle
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?) BEGIN --DO STUFF HERE END
quelle
EXISTS (SELECT 1/0 FROM SERVICE...
- es sollte ein kann nicht durch Null teilen, aber es wird nichtEXISTS (SELECT *
oderEXISTS (SELECT 1
oderEXISTS (SELECT 1/0
entferntIch stimme Ed B zu. Sie sollten die EXISTS-Methode verwenden, aber ein effizienterer Weg, dies zu tun, ist:
IF EXISTS(SELECT 1 FROM service s WHERE s.service_id = ?) BEGIN --DO STUFF HERE END
HTH
quelle
SET SHOWPLAN_ALL ON
forIF EXISTS (SELECT * FROM ...
undIF EXISTS (SELECT 1 FROM ...
Sie können dies auf verschiedene Arten tun.
IF EXISTS(select * from ....) begin -- select * from .... end else -- do something
Oder Sie können
IF NOT EXISTS , @@ROW_COUNT
wie verwendenselect * from .... IF(@@ROW_COUNT>0) begin -- do something end
quelle
Versuchen:
SELECT * FROM service s WHERE s.service_id = ?; IF @@ROWCOUNT=0 BEGIN PRINT 'no rows!' END
quelle
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
quelle
SELECT * FROM service s WHERE s.service_id = ?; IF @@rowcount = 0 begin select 'no data' end
quelle
Um die folgenden Beiträge ein wenig zusammenzufassen:
Wenn Sie sich nur darum kümmern, ob sich mindestens eine übereinstimmende Zeile in der Datenbank
exists
befindet, ist dies die effizienteste Methode, um dies zu überprüfen: Es wird true zurückgegeben, sobald mindestens eine übereinstimmende Zeile gefunden wirdcount
usw. alle übereinstimmenden findet Reihen.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 die Überprüfung des
ROWCOUNT
odercount
wahrscheinlich der beste Weg.quelle
SELECT count(*) as CountThis ....
Dann können Sie es als Zeichenfolge wie folgt vergleichen:
CHECKROW_RS
ist ein Objektquelle
SELECT count(*) as count FROM service s WHERE s.service_id = ?;
teste ob count == 0 ist.
Barocker:
Wählen Sie den Fall aus, wenn (SELECT count (*) als count FROM service s WHERE s.service_id =?) = 0, dann 'No rows, bro!' sonst 'Du hast Daten! "ende als dumme_nachricht;
quelle
Verwenden Sie in meinem SQL die Informationsfunktion
select FOUND_ROWS();
es wird die Nr. zurückgeben. Anzahl der von der Auswahlabfrage zurückgegebenen Zeilen.
quelle
Nun, es gibt eine Möglichkeit, etwas mehr Code zu machen, aber wirklich effektiv
quelle
SELECT * FROM service s WHERE s.service_id = ?; BEGIN print 'no data' END
quelle