使用IDENTITY属性修改列中的数据条目

时间:2012-05-01 21:35:58

标签: sql sql-server sql-server-2008 stored-procedures

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

" IdProcess"必须逐一增加,如果" IdOffice"是相同的,所以我更清楚地画了一张照片:

enter link description here

我是怎么做到的?

感谢您的帮助。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

我还建议您拥有此表的主键作为标识。然后将IdOffice和IdProcess视为行中的数据。如果你这样做,那么Aaron建议在查询时计算IdProcess更有意义。