2012-05-01 95 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的建议就更有意义了。