2009-02-26 15 views
7

wiem, że mogę wrócić pustą tabelę za pomocą następującego zapytania:Jaki jest preferowany sposób zwracania pustej tabeli w SQL?

select * from tbFoo where 1=2 

ale kod nie wygląda dla mnie miła.

Czy istnieje "standardowy" sposób robienia tego?

Jeśli zastanawiasz się, dlaczego chcę zrobić tak dziwną rzecz, to dlatego, że I can't name the datatables I return from a stored procedure, więc potrzebuję pustych symboli zastępczych.

+0

Czy próbujesz wypełnić DataTable z procedury składowanej? –

+0

@REA_ANDREW: fakt, że zamierzam użyć tych pustych danych jako zestawu wyników z procedury składowanej, nie oznacza, że ​​nie wiem, jak obsługiwać zestaw wyników w języku C#. Proponuję usunąć swoją nietypową odpowiedź :) – Brann

+0

Usunąłem. :) Źle zrozumiałem zarówno twoje pytanie, jak i odpowiedź! –

Odpowiedz

20

Po prostu uruchomić zarówno:

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

Wytwarzają one dokładnie taki sam plan wykonania.

+0

@GateKiller: to wygląda lepiej :) – Brann

+0

co z wybraną górą 0 1 z Tabeli? – Brann

+1

+1. Przyjęta odpowiedź powinna dać ci więcej niż +15. –

1

W większości przypadków widzę 1 = 0, ale tak jest to standardowe podejście, gdy naprawdę trzeba. Chociaż naprawdę jest to rzadkie.

+0

Ok. Czy są jakieś implikacje występów w zależności od tabeli, którą wybieram dla mojego wyboru? Chyba nie ... – Brann

+0

Wątpię, aby wystąpił jakikolwiek problem z wydajnością, optymalizator zobaczy, że nie ma potrzeby odczytywania czegokolwiek z DB, spójrz na plan wykonania. – AnthonyWJones

1

To, czego naprawdę potrzebujesz, to information_schema, dzięki niemu możesz poznać definicję tabeli.

Nie wspominając o której bazy danych używasz, więc tu jest link o information_schema Support in MySQL, PostgreSQL (i MSSQL, Oracle itp)

Przykładem z serwisu;

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

W twoim przypadku wszystko, czego potrzebujesz, to nazwy kolumn;

SELECT column_name 
FROM INFORMATION_SCHEMA.Columns 
WHERE table_name = 'employees' 
Powiązane problemy