【问题标题】:SQL Server: Add a column with calculated FieldSQL Server:添加带有计算字段的列
【发布时间】:2019-04-19 20:39:14
【问题描述】:

我正在尝试更改一个表以添加一个包含org_id 的最后 3 位数字的附加列。我这样做是因为我使用的软件由于大小而无法读取34000000000000000002。我想把34000000000000000002变成002,放到新的专栏里。我认为像下面这样的东西会起作用

alter table [org] add new_org_id integer value (select right(org_id,3));

我是 sql 的新手,所以如果我什至不接近,我深表歉意。

【问题讨论】:

    标签: sql sql-server ddl calculated-columns


    【解决方案1】:

    你很亲密。请参阅documentation 了解正确的语法。

    alter table [org] add new_org_id as right(org_id,3);
    

    另外,您可能希望将其设为 persisted 计算列

    PERSISTED 指定数据库引擎将物理存储 计算表中的值,并在任何其他值时更新值 计算列所依赖的列被更新。标记一个 作为 PERSISTED 的计算列允许在 确定性但不精确的计算列。更多 有关信息,请参阅计算列上的索引。任何计算列 用作分区表的分区列必须显式 标记为 PERSISTED。 computed_column_expression 必须是确定性的 当指定 PERSISTED 时。

    【讨论】:

      【解决方案2】:

      我认为非常接近。

      我愿意

      alter table [org] add new_org_id integer
      
      UPDATE [org]
      SET new_org_id = right(org_id,3);
      

      【讨论】:

      • 这不是计算列,每次插入新数据时都必须更新列。
      • 喜欢@scsimon 建议。找出存储过程;或将数据推送到表中的 SSIS 包。然后,添加新列并在合并或插入语句中添加具有所需逻辑的新列。这将关心新数据的传入;但是您仍然需要更新历史数据。 (您必须做 2 件事;如果您考虑将列添加到表中,请做 3 件事)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多