SQL Server 2008 - 将另一列的默认值绑定到主键

时间:2010-12-13 13:55:22

标签: sql sql-server

我想知道如何在SQL Server 2008中最好地实现以下简单的行版本控制策略。我们的想法是将primary_key字段复制到另一列(在本例中为originationg_id),以便将多个版本组合在一起/同一对象的修订。

当我插入初始的“version1”行时,我想将originating_id列默认为primary_key的列。这是由数据库自动生成的,所以我不确定如何去做。后续插入已经知道要为该字段提供的值。

示例:

primary_key, originating_id, date_created, some_value
---------------------------------------------------------------------
1            1               13/12/2010    version1 of object A...
2            1               14/12/2010    version2 of object A...
3            1               15/12/2010    version3 of object A...
4            4               15/12/2010    version1 of object B...

感谢。

2 个答案:

答案 0 :(得分:1)

对我来说,看起来这是一个存储在实际数据旁边的表格,您可以根据控制审计的方式做一些事情。

  1. 您可以使用SELECT SCOPE_IDENTITY()在插入表后获取标识值,然后使用该值插入报表中
  2. 您可以在“插入后”使用触发器,然后您就可以访问主键。
  3. 如果您出于某种奇怪的原因在同一张桌子内进行此操作,我建议可能会考虑不同的策略,因为很难查询这个长期的“最新”版本。

答案 1 :(得分:1)

正如Mitchel Sellers建议的那样,我会使用后插入触发器;在该触发器中,您将使用'inserted'表作为原始id,并使用some_value列。触发器将类似于:

CREATE TRIGGER triggername 
   ON  tablename
   AFTER insert
AS 
BEGIN

declare @somevalue varchar(max)
declare @originalid int
select @somevalue = '<some query to set the description>'
select @originalid = inserted.tablenameid

insert into audittable
select @originalid, getdate(), @somevalue


END