如何使用计算列和 if 语句创建 table?

How to create table with computed column and if statement?

如标题所示,我正在尝试在 SQL 服务器上创建一个 table,其中包含带有 if 语句的计算列。我已经创建了基本列,目前正在尝试使用 ALTER TABLE 添加计算列。

声明中: ALTER table zgodnosc add proba as IIF([Zmiana_1_postoj] = 0 ,-50,[Zmiana_1]) float; 我有错误 'float' 附近的语法不正确。 我尝试了很多组合,总是出错。数据类型为:Zmiana_postoj_1 - 位,Zmiana_1 - 整数。 有人知道如何正确编写吗? 谢谢!

在 SQL 服务器中,您将使用:

alter table zgodnosc add proba as (case when Imiana_1_postoj] = 0 then -50 else Zmiana_1 end) ;

不需要类型。不需要额外的括号。我习惯性地包括它们有两个原因。首先,check 约束需要它们。其次,他们在视觉上很好地界定了表达方式。

如果你想要一个特定的类型,你可以convert/cast:

alter table zgodnosc add proba as (convert(float, (case when Imiana_1_postoj] = 0 then -50 else Zmiana_1 end))

注意:我强烈反对使用 IIF()。它被引入 SQL 服务器以向后兼容 MS Access。 CASE 是 SQL.

中处理条件逻辑的标准方法

去掉 float - SQL 服务器将从表达式的数据类型推断数据类型。

如果将 -50 替换为 -5E1-50e0,则表达式的数据类型将变为 float

ALTER table zgodnosc add proba as IIF([Zmiana_1_postoj] = 0 ,-50e0,[Zmiana_1]);

尽管您可能更愿意对此更明确。

相比CASE WHEN ELSE END,我个人更喜欢IIF的简洁。我怀疑计算列语法是否可以转移到其他 RDBMS 而不管。