tutorial transact examples ejemplos descargar sql sql-server tsql

ejemplos - transact sql examples



¿es posible seleccionar EXISTS directamente como un bit? (8)

Creo que existe solo se puede usar en una cláusula where, por lo que tendrás que hacer una solución (o una subconsulta con existe como cláusula where). No sé si eso cuenta como una solución alternativa.

¿Qué tal esto?

create table table1 (col1 int null) go select ''no items'',CONVERT(bit, (select COUNT(*) from table1) ) -- returns ''no items'', 0 go insert into table1 (col1) values (1) go select ''1 item'',CONVERT(bit, (select COUNT(*) from table1) ) --returns ''1 item'', 1 go insert into table1 (col1) values (2) go select ''2 items'',CONVERT(bit, (select COUNT(*) from table1) ) --returns ''2 items'', 1 go insert into table1 (col1) values (3) go drop table table1 go

Me preguntaba si es posible hacer algo como esto (que no funciona):

select cast( (exists(select * from theTable where theColumn like ''theValue%'') as bit)

Parece que debería ser factible, pero muchas cosas que deberían funcionar en SQL no lo hacen;) He visto soluciones para esto (SELECCIONA 1 donde ... Existe ...) pero parece que debería poder solo arroja el resultado de la función existente como un bit y listo.


Estoy un poco tarde en la adopción de esto; simplemente tropecé con la publicación. Sin embargo, aquí hay una solución que es más eficiente y ordenada que la respuesta seleccionada, pero debería ofrecer la misma funcionalidad:

declare @t table (name nvarchar(16)) declare @b bit insert @t select N''Simon Byorg'' union select N''Roe Bott'' select @b = isnull((select top 1 1 from @t where name = N''Simon Byorg''),0) select @b whenTrue select @b = isnull((select top 1 1 from @t where name = N''Anne Droid''),0) select @b whenFalse


No, no es posible El tipo de datos de bit no es un tipo de datos booleano. Es un tipo de datos entero que puede ser 0,1 o NULL.


No, tendrás que usar una solución alternativa.

Si debe devolver un bit condicional 0/1 de otra manera es:

SELECT CAST( CASE WHEN EXISTS(SELECT * FROM theTable where theColumn like ''theValue%'') THEN 1 ELSE 0 END AS BIT)


Puedes usar IIF y CAST

SELECT CAST(IIF(EXISTS(SELECT * FROM theTable where theColumn like ''theValue%''), 1, 0) AS BIT)


También puede hacer lo siguiente:

SELECT DISTINCT 1 FROM theTable WHERE theColumn LIKE ''theValue%''

Si no hay valores que comiencen con ''theValue'', esto devolverá null (sin registros) en lugar de un bit 0, aunque


SELECT CAST(COUNT(*) AS bit) FROM MyTable WHERE theColumn like ''theValue%''

Cuando lanzas a bit

  • 0 -> 0
  • todo lo demás -> 1
  • Y NULL -> NULL por supuesto, pero no puede obtener NULL con COUNT (*) sin GROUP BY

bit mapas directamente a boolean en .net tipos de datos, incluso si no es realmente ...

Esto se ve similar, pero no da fila (no es cero) si no hay coincidencias, por lo que no es lo mismo

SELECT TOP 1 CAST(NumberKeyCOlumn AS bit) FROM MyTable WHERE theColumn like ''theValue%''


SELECT IIF(EXISTS(SELECT * FROM theTable WHERE theColumn LIKE ''theValue%''), 1, 0)