Azure SQL Server 2016 时态表中的计算列

Computed Columns In Azure SQL Server 2016 Temporal Tables

我正在考虑在我们的数据库中创建时间 tables https://msdn.microsoft.com/en-us/library/mt604462.aspx,但我无法创建几个具有计算列的 tables。

返回的错误消息是不言自明的

"Computed column is defined with a user-defined function which is not allowed with system-versioned table"

但我希望有一种方法可以排除或忽略被跟踪的列?

我尝试删除创建历史记录的计算列 table,然后将计算列添加回 table,但这没有用。

感谢任何帮助。

谢谢

编辑-
我无法找到一种方法来忽略被跟踪的列,但我们能够重构使用 UDF 的列,从而使我们能够使用时间 tables.

系统版本 table 模式修改失败,因为在系统版本控制处于开启状态时添加计算列不受支持,因此出于同样的原因,您无法将常规 table 转换为时间一个,如果上面有计算列。

希望能有所帮助,

我一直在努力将计算列添加到现有 system-versioned table。如果其他人遇到类似问题,我终于意识到历史记录 table 不会以同样的方式对待该列。它最终类似于在基础 table 上有一个 IDENTITY 列,但这会导致历史记录 table.

上有一个常规的 INT 字段

如果您尝试将计算列添加到 system-versioned(时间)table:

  • 首先关闭系统版本控制
  • 然后将计算列添加到基数 table
  • 验证结果计算列的 "type"
  • 将具有适当静态类型的列添加到历史记录中table
  • 重新打开系统版本控制(不要忘记指定历史记录 TABLE)

我觉得很奇怪,您在重新打开系统版本控制时会不小心忽略了 history_table。我希望它要么将版本控制恢复到相同 table,要么抛出某种错误,因为这可能有点意外。

@pasquale-ceglie - 我没有足够的声誉来发表评论,但我想扩展你所说的内容。您应该能够将大多数计算列与时间 table 一起使用,只是更加手动。基本上你不能用计算列复制架构定义,但是你可以复制结果列并在尝试打开所有内容之前生成适当的历史记录table。两个 table 之间的定义略有不同(起初我很困惑)。我在这里订阅了,如果以上内容不清楚并且很好奇,请联系我。