2009-02-26 9 views
7

So che posso tornare un tavolo vuoto utilizzando la seguente query:Qual è il modo preferito per restituire una tabella vuota in SQL?

select * from tbFoo where 1=2 

ma che il codice non sembra gentile con me.

Esiste un modo "standard" per farlo?

Se ti stai chiedendo perché voglio fare una cosa così strana, è perché I can't name the datatables I return from a stored procedure, quindi ho bisogno di segnaposto vuoti.

+0

Si sta tentando di compilare un DataTable da una stored procedure? –

+0

@REA_ANDREW: il fatto che io intenda utilizzare questi dati vuoti come un risultato restituito da una stored procedure non significa che non so come gestire un set di risultati in C#. Suggerisco di eliminare la risposta fuori tema :) – Brann

+0

Ho eliminato. :) Ho frainteso sia la tua domanda che la tua risposta! –

risposta

20

Avendo appena gestiscono entrambi:

SELECT TOP 0 * FROM Table 
and 
SELECT * FROM Table WHERE 1=0 

Essi producono esattamente lo stesso piano di esecuzione.

+0

@GateKiller: questo sembra meglio :) – Brann

+0

cosa dire selezionare superiore 0 1 dalla tabella? – Brann

+1

+1. La risposta accettata dovrebbe comportarti al netto di +15. –

1

La maggior parte delle volte vedo 1 = 0 ma sì questo è praticamente l'approccio standard quando è necessario. Anche se davvero dover è raro.

+0

Ok. Ci sono implicazioni di prestazioni a seconda del tavolo che scelgo per la mia selezione? Immagino di no ... – Brann

+0

Dubito che ci sia un grosso problema di prestazioni, l'ottimizzatore vedrà che non è necessario leggere nulla dal DB, dare un'occhiata al piano di esecuzione. – AnthonyWJones

1

Quello che ti serve veramente è information_schema, usarlo ti consentirà di scoprire la definizione di una tabella.

Non accennate che database in uso, ecco un link di information_schema Support in MySQL, PostgreSQL (e MSSQL, Oracle, ecc)

Un esempio dal sito;

SELECT table_name, column_name, is_nullable, data_type, character_maximum_length 
FROM INFORMATION_SCHEMA.Columns 
WHERE table_name = 'employees' 

Nel tuo caso, tutto ciò di cui hai bisogno sono i nomi delle colonne;

SELECT column_name 
FROM INFORMATION_SCHEMA.Columns 
WHERE table_name = 'employees' 
Problemi correlati