1

我需要创建一个名为“PROCESS”的表,它的主键由两列(IdOffice,IdProcess)组成,问题是我需要“IdProcess”包含IDENTITY属性并一一增加但取决于字段的值“IdOffice”如下:

如果“IdOffice”相同,则“IdProcess”必须逐个增加,所以我放一张图更清楚:

在此处输入链接描述

我该怎么做?

谢谢你的帮助。

4

2 回答 2

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;
于 2012-05-01T21:39:37.307 回答
0

我还建议您为此表设置一个作为身份的主键。然后将 IdOffice 和 IdProcess 视为行中的数据。如果您这样做,那么 Aaron 在查询时计算 IdProcess 的建议就更有意义了。

于 2012-05-01T21:45:41.200 回答