Question

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

Était-ce utile?

La solution

Dans quel but?

  • pour un IF Quickest serait IF EXISTS (SELECT * FROM Table)...
  • Pour un ensemble de résultats, SELECT TOP 1 1 FROM Table renvoie zéro ou un rangées
  • Pour exactement une ligne avec un nombre (0 ou non nulle), SELECT COUNT(*) FROM Table

Autres conseils

Vous pouvez également utiliser existe

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

ou pour vérifier s'il y a 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

Comme d'autres dit que vous pouvez utiliser quelque chose comme ça:

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

Pour la meilleure performance, utilisez le nom de colonne spécifique au lieu de * - par exemple:

SELECT TOP 1 <columnName> 
FROM <tableName> 

Ceci est optimal parce que, au lieu de retourner toute la liste des colonnes, il revient seul. Cela peut faire gagner du temps.

En outre, le retour juste première ligne s'il y a des valeurs, rend encore plus rapide. En fait, vous avez juste une valeur que le résultat -. S'il y a des lignes ou pas de valeur s'il n'y a pas de lignes

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

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

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

Si non, alors peut-être Cet article peut vous orienter dans la bonne direction.

rapide:

SELECT TOP (1) CASE 
        WHEN **NOT_NULL_COLUMN** IS NULL
            THEN 'empty table'
        ELSE 'not empty table'
        END AS info
FROM **TABLE_NAME**
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top