Vérifiez si une table contient des lignes ou non SQL Server 2005
-
23-09-2019 - |
Question
Comment vérifier si une table contient ou non des lignes SQL Server 2005 ?
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**