web-dev-qa-db-fra.com

Vérifier si une table contient des lignes ou pas SQL Server 2005

Comment vérifier si une table contient des lignes ou non SQL Server 2005?

53
bala3569

Dans quel but?

  • Le plus rapide pour un IF serait IF EXISTS (SELECT * FROM Table)...
  • SELECT TOP 1 1 FROM Table renvoie zéro ou une ligne pour un ensemble de résultats
  • Pour exactement une ligne avec un compte (0 ou différent de zéro), SELECT COUNT(*) FROM Table
84
gbn

En outre, vous pouvez utiliser existe

select case when exists (select 1 from table) 
          then 'contains rows' 
          else 'doesnt contain rows' 
       end

ou pour vérifier s'il existe des lignes enfants pour un enregistrement particulier:

select * from Table t1
where exists(
select 1 from ChildTable t2
where t1.id = t2.parentid)

ou dans une procédure

if exists(select 1 from table)
begin
 -- do stuff
end
33
Mongus Pong

Comme dit autre, vous pouvez utiliser quelque chose comme ça:

IF NOT EXISTS (SELECT 1 FROM Table)
  BEGIN 
    --Do Something
  END 
ELSE
  BEGIN
    --Do Another Thing
  END
10
PachecoDt

Ne pouvez-vous pas simplement compter les lignes en utilisant select count(*) from table (ou une colonne indexée au lieu de * si la vitesse est importante)?

Sinon, alors peut-être que cet article pourra vous orienter dans la bonne direction.

1
Jonas Van der Aa

POUR obtenir les meilleures performances, utilisez un nom de colonne spécifique au lieu de * - par exemple: 

SELECT TOP 1 <columnName> 
FROM <tableName> 

Ceci est optimal car, au lieu de renvoyer la liste complète des colonnes, il n'en renvoie qu'une. Cela peut faire gagner du temps.

De plus, renvoyer uniquement la première ligne s'il y a des valeurs, le rend encore plus rapide. En réalité, vous n’obtenez qu’une seule valeur: s’il existe des lignes ou aucune valeur s’il n’y en a pas.

Si vous utilisez la table de manière distribuée, ce qui est très probablement le cas, le transport d'une seule valeur du serveur au client est beaucoup plus rapide.

Vous devez également choisir judicieusement parmi toutes les colonnes pour obtenir les données d'une colonne pouvant prendre le moins de ressources possible. 

0
Sasa

Vite:

SELECT TOP (1) CASE 
        WHEN **NOT_NULL_COLUMN** IS NULL
            THEN 'empty table'
        ELSE 'not empty table'
        END AS info
FROM **TABLE_NAME**
0
AloneInTheDark