sql - 为什么使用 CASE 时 SQL Server 返回一个可为空的位?
问题描述
假设如下表结构:
CREATE TABLE [dbo].[TEST_TABLE]
(
[TEST_VALUE] [smallint] NOT NULL
)
列中的值可以是 0、1 或 2。这可能发生的基本原理与问题无关。
现在,假设我们创建一个视图来封装对该表的简单查询:
CREATE VIEW [dbo].[TEST_VIEW]
AS
SELECT RETURN_VALUE =
CASE
WHEN TBL.[TEST_VALUE] = 1 THEN CAST(1 as bit)
ELSE CAST(0 as bit)
END
FROM [dbo].[TEST_TABLE] AS [TBL]
创建此视图后,如果我们检查视图返回的列,则该RETURN_VALUE
列的类型与(bit, null)
SQL Server Management Studio 中一样,并且没有任何结构(例如将整个 CASE ... END 子句包装到 CAST() 中)来改变这一事实。
什么情况下返回值才能真正为NULL?还是 SQL Server 只是在这里格外小心?有没有办法可以强制视图列的数据类型为(bit, not null)
?
解决方案
推荐阅读
- html - CSS百分比得到错误的值/未对齐的嵌套div
- mysql - 哪种 AWS RDS 实例大小 (RAM) 支持 100 GB 的数据集?
- python - 基于带有 OR 的正则表达式拆分 DataFrame 列
- python-3.x - 导入 sympy 和 matplotlib.pyplot 会导致弃用警告
- autodesk-forge - BIM 360 重新发送邀请
- python - Python EOFError 输入不足
- apache-spark - Spark - 如何通过具有或关系的多个键对数据进行分组
- reactjs - React 测试库 - 无法找到带有文本的元素
- java - 为什么当我执行我的 Java 程序时,它不会转换第一个用户输入,而是每个用户输入之后?
- c# - 毫秒不会从数据中删除