2009-02-26 7 views
7

Je sais que je peux retourner une table vide à l'aide de la requête suivante:Quel est le moyen préféré pour retourner une table vide dans SQL?

select * from tbFoo where 1=2 

mais que le code n'a pas l'air gentil avec moi.

Existe-t-il une façon «standard» de le faire?

Si vous vous demandez pourquoi je veux faire une chose si étrange, c'est parce que I can't name the datatables I return from a stored procedure, j'ai besoin d'espaces réservés vides.

+0

Essayez-vous de remplir un DataTable à partir d'une procédure stockée? –

+0

@REA_ANDREW: le fait que j'aie l'intention d'utiliser ces données vides comme résultat de retour d'une procédure stockée ne signifie pas que je ne sais pas comment gérer un resultset en C#. Je vous suggère de supprimer votre réponse hors sujet :) – Brann

+0

J'ai supprimé. :) J'ai mal compris votre question et votre réponse! –

Répondre

20

Après avoir couru tout à la fois:

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

Ils produisent exactement le même plan d'exécution.

+0

@GateKiller: cela semble mieux :) – Brann

+0

qu'en est-il de sélectionner top 0 1 de Table? – Brann

+1

+1. La réponse acceptée devrait vous net plus de +15. –

1

La plupart du temps je vois 1 = 0 mais oui c'est à peu près l'approche standard quand il le faut vraiment. Bien que vraiment devoir est rare.

+0

Ok. Y a-t-il des implications de performances selon la table que je choisis pour mon select? Je suppose que non ... – Brann

+0

Je doute qu'il y ait un gros problème de performances, l'optimiseur va voir qu'il n'y a pas besoin de lire quoi que ce soit dans la base de données, jetez un oeil au plan d'exécution. – AnthonyWJones

1

Ce dont vous avez vraiment besoin est information_schema, son utilisation vous permettra de connaître la définition d'une table.

Vous ne mentionnez pas quelle base de données que vous utilisez, alors voici un lien sur les information_schema Support in MySQL, PostgreSQL (et MSSQL, Oracle, etc.)

Un exemple du site;

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

Dans votre cas, tout ce dont vous avez besoin sont les noms de colonne;

SELECT column_name 
FROM INFORMATION_SCHEMA.Columns 
WHERE table_name = 'employees' 
Questions connexes