尝试使用Date
字段的计算列创建表时会生成此错误。
操作数类型冲突:int 与日期不兼容
如果我注释掉计算列,它就可以工作。
[DateInActive][Date] NULL, -- Date origination
[IsValid] AS (IsNull(DateInActive, 1)) -- Failure here
on 的想法IsValid
是简单地为该字段返回一个bit
on|off 以表示没有报告非活动日期,如果是,则它是有效的。
该列最终将For JSON
作为is-a
字段传递到输出中的 JSON,以供 SQL 外部使用。
完整的 SQL
CREATE TABLE [history].[PhoneBook](
[PhoneBookId] [int] IDENTITY(1,1) NOT NULL,
[PersonId] [int] NOT NULL,
[PhoneId] [int] NOT NULL,
[DateActive][Date] NOT NULL,
[DateInActive][Date] NULL,
[IsValid] AS (IsNull(DateInActive, 1))
CONSTRAINT [PK_PhoneBook_1] PRIMARY KEY CLUSTERED
(
[PersonId] ASC,
[PhoneId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
根据
ISNULL
文档,返回的数据类型与检查表达式的类型相同,date
在这种情况下是数据类型。表达式失败,ISNULL
因为整数文字 1 不能隐式转换为日期。要返回一个指示日期列是否为 的位
NULL
,您可以改用 CASE 表达式: