如何保留BIT类型字段的NULL值并转换至INT类型字段?
解决办法
问题出在BIT类型到INT类型的隐式转换环节,尽管你的CASE语句逻辑上指定返回NULL,但数据库的隐式转换规则可能将BIT类型的NULL意外转为0。通过显式转换字段类型即可确保NULL值被正确保留,以下是具体方案:
方案一:直接显式转换赋值
无需额外CASE判断,直接将BIT字段转换为INT类型赋值,NULL会自动保留:
SET testColumn2 = CAST(ref.testColumn1 AS INT);
若使用支持CONVERT语法的数据库(如SQL Server),也可以写成:
SET testColumn2 = CONVERT(INT, ref.testColumn1);
方案二:带CASE逻辑的显式转换
如果需要保留CASE分支的其他判断逻辑,只需在返回BIT值的分支里显式转换为INT:
SET testColumn2 = CASE WHEN ref.testColumn1 IS NULL THEN NULL ELSE CAST(ref.testColumn1 AS INT) END;
原理说明
显式类型转换会强制数据库按照指定的目标类型处理数据,BIT类型的NULL转换为INT类型时仍会保持NULL状态;而依赖隐式转换时,部分数据库的规则会将BIT类型的NULL视为0处理,这正是你遇到问题的原因。
内容的提问来源于stack exchange,提问作者Jānis Kļaviņš
相关产品推荐
相关产品推荐

