2009-02-26 10 views
7

sé que puedo volver una mesa vacía utilizando la siguiente consulta:¿Cuál es la forma preferida de devolver una tabla vacía en SQL?

select * from tbFoo where 1=2 

pero que el código no se ve bien conmigo.

¿Existe una forma "estándar" de hacer esto?

Si se está preguntando por qué quiero hacer algo tan extraño, es porque I can't name the datatables I return from a stored procedure, entonces necesito marcadores de posición vacíos.

+0

¿Está intentando llenar una DataTable de un procedimiento almacenado? –

+0

@REA_ANDREW: el hecho de que pretendo utilizar estos datos vacíos como un resultado de retorno de un procedimiento almacenado no significa que no sé cómo manejar un conjunto de resultados en C#. Le sugiero que elimine su respuesta fuera del tema :) – Brann

+0

He eliminado. :) ¡Entendí mal tu pregunta y tu respuesta! –

Respuesta

20

Habiendo dirigido tanto:

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

Ellos producen exactamente el mismo plan de ejecución.

+0

@GateKiller: esto se ve mejor :) – Brann

+0

¿qué hay de seleccionar arriba 0 1 de la Tabla? – Brann

+1

+1. La respuesta aceptada debería generar más de +15. –

1

La mayoría de las veces veo 1 = 0, pero eso es más o menos el enfoque estándar cuando realmente tiene que hacerlo. Aunque realmente tener que es raro.

+0

Ok. ¿Hay alguna implicación de rendimiento dependiendo de la mesa que elijo para mi selección? Supongo que no ... – Brann

+0

Dudo que haya un gran problema de rendimiento, el optimizador verá que no es necesario leer nada del DB, eche un vistazo al plan de ejecución. – AnthonyWJones

1

Lo que realmente necesita es information_schema, usarlo le permitirá conocer la definición de una tabla.

Usted no menciona qué base de datos que está utilizando, así que aquí es un enlace sobre information_schema Support in MySQL, PostgreSQL (y MSSQL, Oracle, etc)

Un ejemplo del sitio;

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

En su caso, todo lo que necesita son los nombres de las columnas;

SELECT column_name 
FROM INFORMATION_SCHEMA.Columns 
WHERE table_name = 'employees' 
Cuestiones relacionadas