Verificare se una tabella contiene le righe di sql server 2005
-
23-09-2019 - |
Domanda
Come Verificare se una tabella contiene le righe di sql server 2005?
Soluzione
Per quale scopo?
- più veloce per un IF sarebbe
IF EXISTS (SELECT * FROM Table)...
- Per un set di risultati,
SELECT TOP 1 1 FROM Table
restituisce zero o una fila - Per esattamente una riga con un conteggio (0 o diverso da zero),
SELECT COUNT(*) FROM Table
Altri suggerimenti
Inoltre, è possibile utilizzare esiste
select case when exists (select 1 from table)
then 'contains rows'
else 'doesnt contain rows'
end
o per controllare se ci sono righe figlio per un particolare record:
select * from Table t1
where exists(
select 1 from ChildTable t2
where t1.id = t2.parentid)
o in un procedimento
if exists(select 1 from table)
begin
-- do stuff
end
Come altri ha detto che si può usare qualcosa di simile:
IF NOT EXISTS (SELECT 1 FROM Table)
BEGIN
--Do Something
END
ELSE
BEGIN
--Do Another Thing
END
Per le migliori prestazioni, utilizzare uno specifico nome di colonna anziché * - ad esempio:
SELECT TOP 1 <columnName>
FROM <tableName>
Questo è ottimale in quanto, invece di restituire l'intero elenco di colonne, sta tornando solo. Questo può risparmiare un po 'di tempo.
Inoltre, tornando appena prima fila se ci sono dei valori, lo rende ancora più veloce. In realtà si ha solo un valore come il risultato -. Se ci sono le righe o nessun valore se non v'è nessuna riga
Se si utilizza la tavola in modo distribuito, che è probabilmente il caso, che il trasporto di un solo valore dal server al client è molto più veloce.
È inoltre dovrebbe scegliere saggiamente tra tutte le colonne per ottenere i dati da una colonna che può richiedere meno risorse possibile.
Non si può solo contare le righe utilizzando select count(*) from table
(o una colonna indicizzata invece di * se la velocità è importante)?
Se poi non forse questo articolo può punto nella giusta direzione.
veloce:
SELECT TOP (1) CASE
WHEN **NOT_NULL_COLUMN** IS NULL
THEN 'empty table'
ELSE 'not empty table'
END AS info
FROM **TABLE_NAME**