Tsql 使用;rowversion";作为主键列

Tsql 使用;rowversion";作为主键列,tsql,primary-key,sql-server-2012,rowversion,Tsql,Primary Key,Sql Server 2012,Rowversion,我正在使用SQL Server 2012,我想创建一个“更改”表-当第二个表列的值更改时,它将填充来自其他表的数据 我将添加到“changes”表“datatime2”和“rowversion”列,以便跟踪何时进行更改 使用“rowversion”作为主键可以吗 我已经读到,如果当前行被更新,它将被更改,这就是为什么它不是使外键无效的“主键”的好候选者 无论如何,如果它不会被用作外键,并且“changes”表的行永远不会被更新(只会插入新行),那么使用“rowversion”作为主键可以吗?还是

我正在使用SQL Server 2012,我想创建一个“更改”表-当第二个表列的值更改时,它将填充来自其他表的数据

我将添加到“changes”表“datatime2”和“rowversion”列,以便跟踪何时进行更改

使用“rowversion”作为主键可以吗

我已经读到,如果当前行被更新,它将被更改,这就是为什么它不是使外键无效的“主键”的好候选者

无论如何,如果它不会被用作外键,并且“changes”表的行永远不会被更新(只会插入新行),那么使用“rowversion”作为主键可以吗?还是我应该使用其他列?

一些好的信息:

仔细阅读MSDN页面还可以发现,如果SELECT INTO语句使用不当,则可能会出现重复的rowversion值。在那里需要注意的东西


我会坚持使用原始数据中的标识字段,并将其带入具有自己标识字段的更改跟踪表。

请指定您使用的数据库。你能解释一下你的逻辑背景吗。。。这个数据库的用途是什么。i、 e.如果这是针对数据仓库的,那么这肯定是一种错误的处理方式。这种想法是,当表中的某个日期因DML操作而更改时,旧数据将插入我的“更改”表中,因此,如果我需要了解主表中的更改是如何或何时进行的,那么要么必须实现某种缓慢更改的维度,要么使用触发器。我更喜欢SCD的第一个选项,但这是一个需要实施的复杂过程。除此之外,为什么要使用行版本而不是物理主键?是的,我将使用触发器。系统中类似的表是以这种方式创建的,我正在遵循它。无论如何,我已经读到这不是一个好主意,所以我决定检查一下这是否会是一个大问题。如果是,我将完成创建一个物理表。@ElectricLlama在“changes”表中,我将拥有“primary”表中的所有列+date和rowversion列。“changes”表将显示“primary”表中的记录如何使用“after insert/delete/update”触发器随时间变化的信息。