web-dev-qa-db-fra.com

Vérification simple du résultat vide de la requête SELECT

Quelqu'un peut-il indiquer comment vérifier si une requête sélectionnée renvoie un ensemble de résultats non vide?

Par exemple, j'ai la requête suivante:

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

Devrais-je faire quelque chose comme:

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

tester si le jeu de résultats n'est pas vide?

47
Denys S.

Utilisez @@ ROWCOUNT:

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

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

Selon Documentation en ligne de SQL Server :

Renvoie le nombre de lignes affectées par la dernière déclaration. Si le nombre de les lignes est plus de 2 milliards, utilisez ROWCOUNT_BIG.

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

 END
88
Ed B

Je suis d'accord avec Ed B. Vous devriez utiliser la méthode EXISTS, mais un moyen plus efficace de le faire est:

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

END

HTH

8
Raja

Vous pouvez le faire de différentes manières.

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

Ou vous pouvez utiliser IF NOT EXISTS , @@ROW_COUNT comme 

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

essayer:

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

Pour résumer un peu les messages ci-dessous:

Si tout ce qui vous importe est de savoir si au moins une ligne correspondante se trouve dans la base de données, utilisez exists car il s’agit du moyen le plus efficace de le vérifier: il retournera true dès qu’il trouvera au moins une ligne correspondante, alors que count, etc. toutes les lignes correspondantes.

Si vous devez réellement utiliser les données pour le traitement ou si la requête a des effets secondaires, ou si vous devez connaître le nombre total réel de lignes, il est probablement préférable de vérifier la valeur ROWCOUNT ou count.

1
Donnie

bien il y a un moyen de le faire un peu plus de code mais vraiment efficace

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

test si compte == 0.

Plus baroque:

sélectionnez la casse lorsque (SELECT compte (*) comme compte DE service s WHERE s.service_id =?) = 0 alors 'Pas de lignes, mon frère!' sinon 'Vous avez des données! "se termine par stupid_message;

0
tpdi

Dans ma fonction d'information d'utilisation de SQL 

select FOUND_ROWS();

ça va retourner le non. des lignes renvoyées par la requête de sélection.

0
Sunil Kumar