如何创建包含计算列和if语句的表?

问题描述 投票:0回答:1

如标题所示,我试图在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.有谁知道如何正确地写出这些吗? 谢谢!

sql-server tsql ddl calculated-columns
1个回答
0
投票

摆脱 float - SQL Server会根据表达式的数据类型来推断数据类型。

如果你把 -50-5E1-50e0 表达式的数据类型将变成 float

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

虽然你可能更喜欢更明确的说法。

就我个人而言,我更喜欢简洁的 IIFCASE WHEN ELSE END. 我怀疑计算列的语法是否可以转移到其他RDBMS上,不管这些。


0
投票

在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中处理条件逻辑的标准方法。

© www.soinside.com 2019 - 2024. All rights reserved.