I tiene una columna calculada que necesito ser un campo de bits, aquí un ejemplo de fórmula:¿Cómo podría forzar el tipo de datos de una columna calculada a un campo de bit que no permite valores nulos?
case when ([some_field] < [Some_Other_field])
then 0
else 1
end
El tipo de datos de conjunto de columnas calculada utilizando esta fórmula es int
.
¿Cuál es la mejor manera de forzar el tipo de datos correcto?
Con una declaración CONVERT
sobre todo el caso, el tipo de datos es bit
pero Allow Nulls
CONVERT([bit],
case when (([some_field] < [Some_Other_field])
then 0
else 1
end,
0)
Lo mismo con una declaración CONVERT
en las expresiones de resultado, el tipo de datos es bit
pero Allow Nulls
case when (([some_field] < [Some_Other_field])
then CONVERT([bit], (0), 0)
else CONVERT([bit], (1), 0)
end
¿O hay una manera más inteligente de hacer esto?
¿Usted o alguien tiene una idea de si hay diferencias de rendimiento entre el ejemplo y la siguiente sintaxis alternativa: 'caso cuando ([some_field] <[Some_Other_field]) continuación ISNULL (CONVERTIR (bit, 0) , 0) else ISNULL (CONVERTIR (bit, 1), 1) end'? – tomosius
@tomosius - No esperaría una * diferencia medible * en el gran esquema de cosas (por ejemplo, los costos de E/S relacionados con el acceso a datos y los gastos generales de red). También sospecho que su variante puede reintroducir el mismo problema que la pregunta trató de evitar: que las expresiones 'CASE' se analizan con frecuencia como potencialmente NULLables aunque por inspección sabemos que no. –