小编典典

为什么我的CASE表达式不确定?

sql

我正在尝试使用CASE表达式创建一个持久化的计算列:

ALTER TABLE dbo.Calendar ADD PreviousDate AS 
case WHEN [Date]>'20100101' THEN  [Date]
    ELSE NULL
    END PERSISTED

MSDN明确表示CASE是确定性的,这里

但是,我得到一个错误:

消息4936,级别16,状态1,行1表’Calendar’中的计算列’PreviousDate’无法保留,因为该列是不确定的。

当然,我可以创建一个标量UDF并将其显式声明为确定性的,但是有没有更简单的方法呢?我已经在获取最新的Service Pack中。谢谢。


阅读 171

收藏
2021-05-05

共1个答案

小编典典

您需要用一种样式转换‘20100101’。

源或目标类型为datetime或smalldatetime,其他源或目标类型为字符串,并指定了不确定的样式。

因此,请尝试以下操作:

...WHEN [Date] > CONVERT(datetime, '20100101', 112)....

编辑:

我不会说这是一个错误,但是SQL Server要求100%澄清。yyyymmdd不是ISO,SQL Server解析yyyy-mm-
dd不可靠(请参阅我的答案链接)

2021-05-05