2009-02-26 5 views
7

ich weiß, ich kann eine leere Tabelle gibt die folgende Abfrage verwenden:Was ist der bevorzugte Weg, um eine leere Tabelle in SQL zurückzugeben?

select * from tbFoo where 1=2 

aber, dass Code sieht nicht nett zu mir.

Gibt es einen "Standard" Weg dies zu tun?

Wenn Sie sich fragen, warum ich so eine seltsame Sache tun möchte, ist es, weil I can't name the datatables I return from a stored procedure, so brauche ich leere Platzhalter.

+0

Versuchen Sie eine DataTable aus einer Stored Procedure zu füllen? –

+0

@REA_ANDREW: die Tatsache, dass ich beabsichtige, diese leeren Daten als Rückgabeergebnissatz aus einer gespeicherten Prozedur zu verwenden, bedeutet nicht, dass ich nicht weiß, wie ich mit einem Resultset in C# umgehen soll. Ich schlage vor, Sie löschen Ihre Off-Topic-Antwort :) – Brann

+0

Ich habe gelöscht. :) Ich habe sowohl deine Frage als auch deine Antwort missverstanden! –

Antwort

20

Da ich gerade laufen beide:

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

Sie produzieren genau den gleichen Ausführungsplan.

+0

@GateKiller: das sieht besser aus :) – Brann

+0

was ist mit wählen top 0 1 aus Tabelle? – Brann

+1

+1. Die angenommene Antwort sollte Sie mehr als +15 bringen. –

1

Meistens sehe ich 1 = 0, aber das ist so ziemlich der Standardansatz, wenn man wirklich muss. Obwohl es wirklich selten ist.

+0

Ok. Gibt es Auswirkungen auf die Leistung, abhängig von der Tabelle, die ich für meine Auswahl ausgewählt habe? Ich denke nicht ... – Brann

+0

Ich bezweifle, dass es ein großes Leistungsproblem gibt, der Optimierer wird sehen, dass es keine Notwendigkeit gibt, etwas aus der Datenbank zu lesen, werfen Sie einen Blick auf den Ausführungsplan. – AnthonyWJones

1

Was Sie wirklich brauchen, ist information_schema, damit Sie die Definition einer Tabelle herausfinden können.

Sie erwähnen nicht, welche Datenbank Sie verwenden, ist so hier ein Link zu information_schema Support in MySQL, PostgreSQL (und MSSQL, Oracle, usw.)

Ein Beispiel von der Seite;

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

In Ihrem Fall brauchen Sie nur die Spaltennamen;

SELECT column_name 
FROM INFORMATION_SCHEMA.Columns 
WHERE table_name = 'employees' 
Verwandte Themen