2013-04-23 90 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