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?
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.
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
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
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
essayer:
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
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
.
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"
}
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;
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.