与标题一样,我试图在Server上创建一个包含带有if语句的计算列的表。我已经创建了基本列,目前正在尝试使用ALTER添加计算列。
在语句:ALTER table zgodnosc add proba as IIF([Zmiana_1_postoj] = 0 ,-50,[Zmiana_1]) float;
,我得到错误的语法附近的‘浮子’。我试过很多组合,总是会出错。数据类型有: Zmiana_postoj_1 -位,Zmiana_1 - int。有人知道怎么写得对吗?谢谢!
发布于 2020-05-08 03:05:18
摆脱float
- Server将从表达式的数据类型推断数据类型。
如果将-50
替换为-5E1
或-50e0
,则表达式的数据类型将变为float
ALTER table zgodnosc add proba as IIF([Zmiana_1_postoj] = 0 ,-50e0,[Zmiana_1]);
不过你可能更喜欢说得更清楚些。
就我个人而言,我更喜欢IIF
的简洁性而不是CASE WHEN ELSE END
。我怀疑计算的列语法是否可以转移到其他RDBMS,不管如何。
发布于 2020-05-08 02:52:01
在Server中,您将使用:
alter table zgodnosc add proba as (case when Imiana_1_postoj] = 0 then -50 else Zmiana_1 end) ;
不需要什么类型的。没有必要使用额外的括号。我习惯于把它们包括在内,原因有两个。首先,check
约束需要它们。其次,他们在视觉上对表达式进行了很好的划分。
如果需要特定类型,则可以转换/强制转换:
alter table zgodnosc add proba as (convert(float, (case when Imiana_1_postoj] = 0 then -50 else Zmiana_1 end))
注意:我强烈反对使用IIF()
。为了向后兼容MS Access,将其引入到Server中。CASE
是在SQL中处理条件逻辑的标准方法。
https://stackoverflow.com/questions/61677435
复制