2010-12-17 14 views

Respuesta

6

El único uso posible para eso sería evitar que la consulta devuelva ninguna fila. Lo he hecho ocasionalmente para probar la lógica de tipo "sin resultados encontrados".

15

en el servidor SQL, puede crear rápidamente una copia de una tabla sin ningún tipo de datos de este tipo

select * into Newtable 
from Oldtable 
where 1 = 0 

esto creará una nueva tabla con la misma estructura que la vieja mesa de

Otra opción es para devolver un conjunto de resultados vacío

+0

aún más simples con mismo efecto: 'select * into NEWTABLE de oldtable donde 0' – Jpsy

3

He visto algunas utilidades usar esa sintaxis para recopilar metadatos sobre una tabla. Pueden ejecutar una consulta como select * from sometable where 1=0 para obtener "eficientemente" las columnas de la tabla sin ningún dato.

+0

no funcionaría en MySQL, creo. Para eso sirve 'SHOW COLUMNS'. – ceejayoz

+0

@ceejayoz: Gracias por la información. No sabía eso sobre MySQL; Supuse (aparentemente incorrectamente) que devolvería un conjunto de resultados vacío, que aún tendría las columnas. Funciona en otras implementaciones SQL (algunas al menos). –

-1

Lo he utilizado en código al generar el SQL basado en una lista de valores de la casilla de verificación. Por ejemplo, si permito al usuario elegir entre una lista de frutas:

Manzanas Naranjas Peras

... y seleccionar manzanas y naranjas, mi pseudo código se parece a:

string sqlWhere = "select * from fruit where 1 = 0" 
if (FruitList.Any()) { 
    sqlWhere += " or code in (" 
    foreach (Fruit in FruitList) 
     sqlWhere += string.Format("'{0}',"); 
    /*Add the close parens*/ 
    sqlWhere = sqlWhere.Substring(0,sqlWhere.Length-2) + ")"; 
} 

que solo devolverá los valores que seleccionó el usuario. Si no seleccionan ninguna fruta, no se devuelven resultados.

* Tenga en cuenta que este código no tiene en cuenta la inyección de SQL. Sólo un ejemplo de por qué es posible ver el

where 1 = 0 
+0

Creo que su Y debe convertirse en un quirófano. – ceejayoz

+0

Tienes razón. Actualizado. –

0

Se podría utilizar una consulta como esta como un 'ping' para comprobar si su conexión a la base de datos sigue abierta y la base de datos es saludable y así sucesivamente - si no obtiene resultados, lo es, pero si obtiene algún tipo de error, hay un problema. Escribirías la consulta contra algún tipo de tabla de sistema. Dependiendo de su base de datos, es posible que pueda hacer algo más simple: en PostgreSQL, puede simplemente decir select 1;, y en Oracle, he visto select 1 from dual;. Si su base de datos no tiene la capacidad de manejar expresiones de flotación libre en selecciones, y no tiene equivalente de dual, podría hacer algo como select * from sometable where 0 = 1;.

Cuestiones relacionadas