¿Cómo devolver un valor booleano en la instrucción de selección SQL?
Probé este código:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
Y solo regresa TRUE
si UserID
existe en la tabla. Quiero que regrese FALSE
si UserID
no existe en la tabla.
SELECT WHEN CAST(1 AS BIT) THEN 'YES' END AS result
, da como resultado un error,CAST(1 AS BIT)
es decir, no es el mismo VERDADERO lógico.Respuestas:
Lo que tenga allí no devolverá ninguna fila si el usuario no existe. Esto es lo que necesitas:
fuente
1
lugar de*
.*
son más idiomáticos. Ver esta pregunta .AS bool
parte es muy importante):CAST( CASE WHEN EXISTS ( SELECT * FROM mytable WHERE mytable.id = 1) THEN TRUE ELSE FALSE END AS bool) AS nameofmycolumn
Posiblemente algo en este sentido:
http://sqlfiddle.com/#!3/5e555/1
fuente
Dado que comúnmente
1 = true
y0 = false
, todo lo que necesita hacer es contar el número de filas y emitir aboolean
.Por lo tanto, su código publicado solo necesita una
COUNT()
función agregada:fuente
Exists(
prueba es mucho más rápido que hacer unaCount(1)
prueba en tablas con un gran número de filas.UserID
está indexada (o incluso es la PK) seguramente irá directamente a la única fila que existe (o no).Use 'Existe' que devuelve 0 o 1.
La consulta será como:
fuente
Si count (*) = 0 devuelve falso. Si count (*)> 0 devuelve verdadero.
fuente
Lo hago así:
Al ver que un booleano nunca puede ser nulo (al menos en .NET), debería ser falso por defecto o puede configurarlo usted mismo si su valor predeterminado es verdadero. Sin embargo, 1 = verdadero, entonces nulo = falso, y sin sintaxis adicional.
Nota: Yo uso Dapper como mi micro ormo, imagino que ADO debería funcionar igual.
fuente
Observe otro problema equivalente: crear una consulta SQL que devuelva (1) si se cumple la condición y un resultado vacío de lo contrario. Tenga en cuenta que una solución a este problema es más general y se puede usar fácilmente con las respuestas anteriores para lograr la pregunta que hizo. Como este problema es más general, estoy probando su solución además de las hermosas soluciones presentadas anteriormente para su problema.
fuente
Para aquellos de ustedes que están interesados en obtener el valor agregando un nombre de columna personalizado, esto funcionó para mí:
Puede omitir las comillas dobles del nombre de la columna en caso de que no esté interesado en mantener la distinción entre mayúsculas y minúsculas del nombre (en algunos clientes).
Ajusté ligeramente la respuesta de @ Chad para esto.
fuente
inicialmente isAvailable el valor booleano se establece en 0
fuente