2012-05-01 68 views
1

我需要創建一個名爲「PROCESS」的表,其主鍵由兩列(IdOffice,IdProcess)組成,問題是我需要「IdProcess」包含IDENTITY屬性並依次增加,但取決於字段「IdOffice」的值如下:修改具有IDENTITY屬性的列中的數據條目

如果「IdOffice」相同,則必須逐個增加「IdProcess」,因此我更加清楚地放置了一張圖片:

enter link description here

我該怎麼做呢?

感謝您的幫助。

回答

4

你不能用IDENTITY做到這一點。你需要有一個單獨的列。問題是,這可能是非常有問題的維護。如果你有這樣的數據:

IdOffice IdProcess 
--------- ---------- 
1   1 
1   2 
1   3 
2   1 
2   2 

當你刪除第二行會發生什麼?是否需要爲IdOffice = 1的所有值重新計算IdProcess?

假設您有其他一些要排序的列,您可以在查詢時始終生成此數字,而不必支付存儲數據的成本並在表更改時處理維護。

SELECT IdOffice, IdProcess = ROW_NUMBER() OVER 
    (PARTITION BY IdOffice ORDER BY DateCreated) 
FROM dbo.YourTable 
ORDER BY IdOffice, IdProcess; 
0

我也建議你有這個表的主鍵是身份。然後將IdOffice和IdProcess視爲行中的數據。如果你這樣做,那麼亞倫在查詢時計算IdProcess的建議就更有意義了。