update type true tipos tipo tabla false datos dato campo sql sql-server tsql bit

type - Imply bit con constante 1 o 0 en SQL Server



tipos de datos sql server msdn (8)

¿Es posible expresar 1 o 0 como un bit cuando se usa como un valor de campo en una declaración de selección?

p.ej

En esta declaración de caso (que es parte de una declaración de selección) ICourseBased es de tipo int.

case when FC.CourseId is not null then 1 else 0 end as IsCoursedBased

Para que sea un tipo de bit, tengo que emitir ambos valores.

case when FC.CourseId is not null then cast(1 as bit) else cast(0 as bit) end as IsCoursedBased

¿Hay una manera corta de expresar los valores como tipo de bit sin tener que lanzar cada vez?

(Estoy usando MS SQL Server 2005)


Disfruta esto :) Sin lanzar cada valor individualmente.

SELECT ..., IsCoursedBased = CAST( CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END AS BIT ) FROM fc


IIF (FC.CourseId NO ES NULO, 1, 0)


Lamentablemente no. Tendrás que lanzar cada valor individualmente.


No, pero podrías lanzar la expresión completa en lugar de los subcomponentes de esa expresión. En realidad, eso probablemente lo hace menos legible en este caso.


Puede agregar el segundo fragmento como definición de campo para ICourseBased en una vista.

DECLARE VIEW MyView AS SELECT case when FC.CourseId is not null then cast(1 as bit) else cast(0 as bit) end as IsCoursedBased ... SELECT ICourseBased FROM MyView


Si desea que la columna sea BIT y NOT NULL, debe colocar ISNULL antes del CAST.

ISNULL( CAST ( CASE WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0 END AS BIT) ,0) AS IsCoursedBased


Un poco más condensado que los gbn:

Suponiendo CourseId no es cero

CAST (COALESCE(FC.CourseId, 0) AS Bit)

COALESCE es como un ISNULL() , pero devuelve el primer no nulo.

Un CourseId cero se CourseId en yeso a 1, mientras que CourseId nulo hará que COALESCE devuelva el siguiente valor, 0


cast ( case when FC.CourseId is not null then 1 else 0 end as bit)

La especificación CAST es "CAST (expresión AS tipo)". El CASO es una expresión en este contexto.

Si tiene varias de esas expresiones, declararía bit vars @true y @false y las usaría. O use UDF si realmente quisiera ...

DECLARE @True bit, @False bit; SELECT @True = 1, @False = 0; --can be combined with declare in SQL 2008 SELECT case when FC.CourseId is not null then @True ELSE @False END AS ...