基本上,我希望在运行时在时态表中创建计算列,为此,我必须遵循以下步骤:
- 将SYSTEM_VERENCING设置为OFF
- 更改tempral并添加计算列
- 将系统版本控制打开
下面是一个例子: 我有一个时态表‘FTWV’和一个历史表‘FTWVHistory’,计算列的内容将从json列‘data’中提取.
ALTER TABLE [dbo].[FTWV] SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE [dbo].[FTWV] ADD [Identity] AS JSON_VALUE([Data], '$.Identity');
ALTER TABLE [dbo].[FTWV] SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[FTWVHistory]));
当我执行上述查询时,我收到以下错误消息:
将SYSTEM_VERDING设置为ON失败,因为表‘DatabaseName.dbo.FTWV’有5列,而表‘DatabaseName.dbo.FTWVHistory’有4列.
因此,我猜如果我只将相同的计算列添加到‘FTWVHistry’表中,它就会起作用
ALTER TABLE [dbo].[FTWV] SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE [dbo].[FTWV] ADD [Identity] AS JSON_VALUE([Data], '$.Identity');
ALTER TABLE [dbo].[FTWVHISTORY] ADD [Identity] AS JSON_VALUE([Data], '$.Identity');
ALTER TABLE [dbo].[FTWV] SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[FTWVHistory]));
但在执行最后一行(将SYSTEM_VERCARATION设置为ON)时,我得到了另一行代码:
将SYSTEM_VERENCING设置为ON失败,因为历史记录表‘DatabaseName.dbo.FTWVHistory’计算了列规范.请考虑删除所有计算列规范,然后重试.