2013-04-23 125 views
0

我有一个表,其中每个记录有一个ValueVersionEffectiveVersionExpiration列。目前,VersionEffective列正确填写,但VersionExpiration列默认为'9999-12-31'。对于具有相同值的记录,只有最新VersionEffective的记录不应过期。剩下的应该是。具体而言,当插入新记录时,如果先前存在具有相同值的活动记录,则该记录将以其VersionExpiration等效于新记录的VersionEffective而过期。我有一个存储过程,可以在插入时正确设置VersionEffective/VersionExpiration,但我需要返回并追溯更新旧记录的VersionExpiration字段。将版本添加到SQL Server表

什么我目前的想法是类似以下的东西:

UPDATE fubarTable as t 
    SET t.VersionExpiration = ( 
       SELECT TOP 1 VersionEffective 
       FROM fubarTable as f 
       WHERE t.Value = f.Value 
      ORDER BY VersionEffective DESC 
     ) 
     ; 

但是,这是行不通的。有任何想法吗?

+0

所以你问如何做出上述表示的工作?或者要求您的版本系统有不同的实现? – cdlong 2013-04-23 19:07:25

+0

我正在寻找不同的实现方式,因为我相当确信我所提议的并不是远程接近可行的方式。 – Fibs 2013-04-23 19:15:43

回答

0

我想这应该与您的当前设置为你做它:

UPDATE t 
SET t.VersionExpiration = ( 
     SELECT TOP 1 VersionEffective 
     FROM fubarTable as f 
     WHERE t.Value = f.Value and f.VersionEffective > t.VersionEffective 
    ORDER BY VersionEffective 
) 

FROM fubarTable t 
where t.VersionEffective <> (Select MAX(VersionEffective) from fubarTable where Value = t.Value) 
+0

对于除3条记录以外的所有记录,这将所有记录的VersionExpiration设置为表中最高的VersionEffective。 – Fibs 2013-04-23 19:34:35

+0

我更新了查询,因为我认为我误解了您的表结构以及记录的结构,它是具有相同值的记录。我期待的价值改变 – 2013-04-23 19:37:31

+0

再次更新,以过滤掉最新的记录被更新,因为你想离开那在9999-12-31我相信。 – 2013-04-23 19:43:01

相关问题