首页 > 解决方案 > 为什么使用 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)

标签: sqlsql-servercasenullable

解决方案


推荐阅读