我正在考虑在我们的数据库中创建时态表https://msdn.microsoft.com/en-us/library/mt604462.aspx,但我不能在几个有计算列的表上。
返回的错误消息非常自我解释
“计算列是使用用户定义的函数定义的,系统版本表不允许这样做”
但是我希望有一种方法可以排除或忽略被跟踪的列吗?
我尝试删除计算列创建历史表,然后将计算列添加回表中,但这不起作用。
感谢任何帮助。
由于
编辑 -
我无法找到一种方法来忽略被跟踪的列,但我们能够重构出使用UDF的列,从而使我们能够使用时态表。
答案 0 :(得分:4)
我正在努力将计算列添加到现有的系统版本表中。如果遇到类似问题的其他人,我终于意识到历史表不会以同样的方式处理列。它最终类似于在基表上有一个IDENTITY列,但这会导致历史表上的常规INT字段。
如果您尝试将计算列添加到系统版本(时间)表:
我发现在重新启用系统版本控制时,您可能会意外省略history_table,这很奇怪。我希望它可以恢复版本化到同一个表或者抛出某种错误,因为它可能会有一些意想不到的行为。
@ pasquale-ceglie - 我没有足够的声誉发表评论,但我想扩大您所说的内容。您应该能够将大多数计算列与时态表一起使用,只需更多手动。基本上,您不能使用计算列复制模式定义,但是您可以复制结果列并生成相应的历史表,然后再尝试打开所有内容。这两个表的定义略有不同(起初我很困惑)。我在这里订阅,如果以上内容不清楚并且很好奇,请告诉我。
答案 1 :(得分:0)
系统版本的表架构修改失败,因为不支持在系统版本控制为ON时添加计算列,因此出于同样的原因,如果在其上有计算列,则无法将常规表转换为临时表
希望会有所帮助,