Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/07/2004, 14h44   #1
rsc
Membre émérite
 
Avatar de rsc
 
Homme
Développeur informatique
Inscription : juin 2004
Messages : 699
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 61
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2004
Messages : 699
Points : 874
Points : 874
Par défaut Tester si une table est vide

J'ai besoin de tester si une table est vide. Je peux bien sûr utiliser une requête SQL :
Code :
SELECT COUNT (*) FROM MATABLE
,
mais si la table contient beaucoup de données, c'est long. N'y aurait-il pas une autre manière plus rapide (SQL ou spécifiquement Interbase) ?.

merci d'avance
Roland

PS J'utilise Interbase 6[/code]
rsc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2004, 15h37   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Pourquoi compter les éléments ?? si vous voulez juste savoir si la table est vide faite un select et regardez s'il y a un résultat ou non, celà évite de balayer toute la table avec un count...

Par contre suivant la méthode d'accés (et notamment ODBC) il est possible (il me semble) que celui ci oblige interbase à tout envoyer ce qui ne serait pas terrible.

Donc le plus simple est encore de faire une PS
avec dedans juste un
Code :
1
2
3
4
5
6
7
...
FOR SELECT IDColonne FROM MaTable INTO :ID
  DO
  begin
    suspend;
    exit;
  end
qui renvoit une ligne si la table en contient sinon renvoie rien...

ou encore ceci :

Code :
SELECT 1 FROM rdb$database WHERE EXISTS (SELECT * FROM MaTable)
Qui renvoit 1 si la table contient des données et renvoit rien si la table est vide.
Bref que de solutions
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2004, 16h25   #3
rsc
Membre émérite
 
Avatar de rsc
 
Homme
Développeur informatique
Inscription : juin 2004
Messages : 699
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 61
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2004
Messages : 699
Points : 874
Points : 874
Citation:
Bref que de solutions
Je n'en doutais pas, mais je ne regrette rien, je n'aurais pas trouvé tout seul .C'est pour ça qu'il y a des experts. Merci infiniment !

J'ai pris la dernière solution, je garde l'autre sous le coude.

Un détail : j'ai dû nommer le champ renvoyé, ce qui donne :

Code :
SELECT 1 AS ch1  FROM rdb$database WHERE EXISTS (SELECT * FROM MaTable)
rsc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h16.


 
 
 
 
Partenaires

Hébergement Web