Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何最好地填充从属数字键_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

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

Sql server 如何最好地填充从属数字键,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我有两张表:项目和缺陷 每个缺陷与一个(且仅一个)项目相关 Items的PK是一个标识列(ItemID),在Defects中显示为FK列,用于关联两个表 缺陷的PK是一个标识列(DefectID) 但是,缺陷中还有一个名为RefNo的从属数字键,它必须由每个ItemID的序列号填充,因此: 缺陷 DefectID ItemID RefNo 1 1 1 2 1 2 3 1 3 4

我有两张表:项目和缺陷

每个缺陷与一个(且仅一个)项目相关

Items的PK是一个标识列(ItemID),在Defects中显示为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
填充Ref列的最佳方式是什么

目前,我继承的代码在前端完成了这项工作,这显然是个坏主意

我开始编写一个插入触发器(SQL Server 2008-R2),但我想知道原子性和在调用触发器时可能需要更新多行,以及不同用户同时插入以尝试插入同一引用号的可能性

[编辑]


我正在维护一个现有数据库,删除RefNo列并使用动态计算的值重新绘制它不是一个选项。

您可以使用下面的行编号来生成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

我不清楚你在这里的建议是什么。你是说不需要整个列,因为它可以动态生成?如果是这样的话,这并不能真正回答我的问题,因为我需要修改一个现有的数据库,删除列不是一个选项。我将修正我的问题以说明这一点。或者你是在建议我用这个来计算下一个要添加到RefNo列中的数字?如果是,怎么做?