我正在尝试使用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中。谢谢。
您需要用一种样式转换‘20100101’。
源或目标类型为datetime或smalldatetime,其他源或目标类型为字符串,并指定了不确定的样式。
因此,请尝试以下操作:
...WHEN [Date] > CONVERT(datetime, '20100101', 112)....
编辑:
我不会说这是一个错误,但是SQL Server要求100%澄清。yyyymmdd不是ISO,SQL Server解析yyyy-mm- dd不可靠(请参阅我的答案链接)