如标题所示,我试图在SQL Server上创建一个包含计算列和if语句的表。我已经创建了基本的列,目前正在尝试使用ALTER TABLE添加计算列。
在语句中。ALTER table zgodnosc add proba as IIF([Zmiana_1_postoj] = 0 ,-50,[Zmiana_1]) float;
我得到了错误信息 'float'附近的语法不正确。我试了很多组合,总是出错。数据类型是:Zmiana_postoj_1 - bit, Zmiana_1 - int.谁能告诉我如何使用数据类型?Zmiana_postoj_1 - bit, Zmiana_1 - int.有谁知道如何正确地写出这些吗? 谢谢!
摆脱 float
- SQL 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上,不管这些。
在SQL Server中,你会使用:
alter table zgodnosc add proba as (case when Imiana_1_postoj] = 0 then -50 else Zmiana_1 end) ;
不需要类型 额外的括号是不必要的。 我习惯性地包含它们有两个原因。 首先,它们需要用于 check
的约束。 其次,它们很好地在视觉上对表达式进行了划分。
如果你想要一个特定的类型,你可以convertcast。
alter table zgodnosc add proba as (convert(float, (case when Imiana_1_postoj] = 0 then -50 else Zmiana_1 end))
注意: 我强烈不鼓励使用... ... IIF()
. 它被引入到SQL Server中是为了向后兼容MS Access。 CASE
是SQL中处理条件逻辑的标准方法。