我有一个 TableA,其中有一个我创建的 TransID,用于将某些记录保存在一起。审核完这些记录后,我需要将 TableA.DocNum 分配给 TableB.DocNum 值 +1
表A
TransId | 文档编号 |
---|---|
5 | |
5 | |
6 | |
6 | |
7 | |
7 |
表B
文档编号 |
---|
0000001 |
表A最终结果
TransId | 文档编号 |
---|---|
5 | 0000002 |
5 | 0000002 |
6 | 0000003 |
6 | 0000003 |
7 | 0000004 |
7 | 0000004 |
表B完成结果
表B
文档编号 |
---|
0000004 |
我尝试过循环,但似乎不起作用。
使用dense_rank()的方法在哪里
示例或dbFiddle
Declare @TableA Table ([TransID] int,[DocNum] varchar(50)) Insert Into @TableA Values
(4,'0000001')
,(5,NULL)
,(5,NULL)
,(6,NULL)
,(6,NULL)
,(7,NULL)
,(7,NULL)
Declare @TableB Table (DocNum varchar(50))
Insert Into @TableB values
('0000001');
-- Add this to your Stored Procedure
with cte as (
Select *
,NewVal = format(B.Base+dense_rank() over (order by TransID),'0000000')
from @TableA A
Cross Join ( Select Base=try_convert(int,max(DocNum)) from @TableB) B
Where A.DocNum is null
)
Update cte set DocNum=NewVal
Update @TableB set DocNum = (select max(DocNum) from @TableA)
Select * from @TableA
Select * from @TableB
结果
TransID DocNum
4 0000001 -- Added for demo
5 0000002
5 0000002
6 0000003
6 0000003
7 0000004
7 0000004
DocNum
0000004