如何最好地填充从属数字键

时间:2019-11-25 09:54:53

标签: sql-server sql-server-2008-r2

我有两个表:项目和缺陷。

每个缺陷都涉及一个(只有一个)项。

“项目PK”是一个标识列(ItemID),在“缺陷”中显示为FK列,以关联两个表。

缺陷的PK是一个标识列(DefectID)。

但是,在缺陷中还有一个从属数字键,称为RefNo,该数字键必须由每个ItemID 的序列号填充,因此:

缺陷

DefectID   ItemID    RefNo
1          1         1 
2          1         2
3          1         3
4          2         1
5          2         2
6          3         1
7          4         1
8          3         2
9          1         4

填充“引用”列的最佳方法是什么?

目前,我继承的代码是在前端完成此操作的,这显然是一个坏主意。

我开始编写插入触发器(SQL Server 2008-R2),但想知道原子性以及调用该触发器时是否可能更新多行的可能性-以及不同用户尝试同时插入的可能性插入相同的参考号。

[编辑]

我要维护现有的数据库,并删除RefNo列,并用即时计算出的值重新填充它。

1 个答案:

答案 0 :(得分:0)

您可以按以下方式使用ROW_NUMBER生成refno-

WITH your_table(DefectID,ItemID,RefNo)
AS
(
SELECT 1,1,1 UNION ALL
SELECT 2,1,2 UNION ALL
SELECT 3,1,3 UNION ALL
SELECT 4,2,1 UNION ALL
SELECT 5,2,2 UNION ALL
SELECT 6,3,1 UNION ALL
SELECT 7,4,1 UNION ALL
SELECT 8,3,2 UNION ALL
SELECT 9,1,4
)

SELECT *, 
ROW_NUMBER() OVER (PARTITION BY ItemID ORDER BY DefectID) AS RefNo_new
FROM your_table
order by 2,1

输出-

DefectID    ItemID  RefNo   RefNo_new
1           1       1       1
2           1       2       2
3           1       3       3
9           1       4       4
4           2       1       1
5           2       2       2
6           3       1       1
8           3       2       2
7           4       1       1