Domanda

Come Verificare se una tabella contiene le righe di sql server 2005?

È stato utile?

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**
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top