当前位置: 首页 > 面试题库 >

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

詹正浩
2023-03-14
问题内容

我正在尝试使用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并将其显式html" target="_blank">声明为确定性的,但是有没有更简单的方法呢?我已经在获取最新的Service Pack中。谢谢。


问题答案:

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

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

因此,请尝试以下操作:

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

编辑:

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



 类似资料:
  • 问题内容: 我的转换案例声明昨天运行良好。但是,当我今天早些时候运行代码时,eclipse给我一个错误,强调了红色的case语句,并说:case表达式必须是常量表达式,它是常量,我不知道发生了什么。这是我的代码如下: 所有R.id.int都用红色下划线。 问题答案: 在常规的Android项目中,资源R类中的常量声明如下: 但是,从ADT 14开始,在图书馆项目中,它们将这样声明: 换句话说,常数

  • 问题内容: 我正在尝试编写一个超级简单的文件来在Go项目中运行测试。项目的依赖项已供应,但我想跳过这些测试。从命令行运行时,我只是做 但是,当我把它变成这样的时候: 该表达式将不被评估: 我如何获得make以类似shell的方式插值表达式的方法? 问题答案: 在Makefile配方部分中,您将需要使用escape 使用第二个:

  • 我不知道为什么这个正则表达式不匹配。也许你能发现错误。 ficontents: 我想匹配>>>>>>客户端9462<<<<<捕获该号码,以及此后的所有内容,直到另一个客户端号码。所以我的第一个捕获是“9462”,第二个捕获是“Had a program exception;please check the error log”。 它使用JavaScript设置在regex101.com中工作得很好

  • 我试图表达10的幂10,但它不起作用,所以我认为问题是数据类型的范围。 我的预期答案是10000000000,但运算结果是1410065408 有什么问题?

  • 问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火

  • 它给出的输出为“cricket”。但我不明白为什么?http://ideone.com/fteahg