我有一个计算列我需要的位域,这里式的一个示例:如何强制将计算列的数据类型强制为不允许空值的位域?
case when ([some_field] < [Some_Other_field])
then 0
else 1
end
使用此公式计算列组的数据类型是int
。
什么是强制正确数据类型的最佳方式?
随着整个案件一CONVERT
声明,数据类型为bit
但Allow Nulls
CONVERT([bit],
case when (([some_field] < [Some_Other_field])
then 0
else 1
end,
0)
与结果的表达式一个CONVERT
声明同样的事情,数据类型为bit
但Allow Nulls
case when (([some_field] < [Some_Other_field])
then CONVERT([bit], (0), 0)
else CONVERT([bit], (1), 0)
end
或者有更明智的做法吗?
你或任何人有一个想法,如果有与以下备选句法的示例之间的性能差异:'情况下,当([some_field] <[Some_Other_field]) 然后ISNULL(CONVERT(位0) ,0) else ISNULL(CONVERT(bit,1),1) end'? – tomosius
@tomosius - 我不希望在事物的宏观体系中出现*可测量*差异(例如,与数据访问和网络开销相关的I/O成本)。我还怀疑你的变种可能会重新提出这个问题试图避免的问题 - 即“经常检查我们知道它不行的情况下”CASE“表达式经常被分析为可能无效。 –