Comment vérifier si une table contient des lignes ou non SQL Server 2005?
Dans quel but?
IF EXISTS (SELECT * FROM Table)...
SELECT TOP 1 1 FROM Table
renvoie zéro ou une ligne pour un ensemble de résultatsSELECT COUNT(*) FROM Table
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
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
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.
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.
Vite:
SELECT TOP (1) CASE
WHEN **NOT_NULL_COLUMN** IS NULL
THEN 'empty table'
ELSE 'not empty table'
END AS info
FROM **TABLE_NAME**