将 TableA 中的列更新为 TableB 的存储过程,列中的每次更改值 +1

问题描述 投票:0回答:1

我有一个 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

我尝试过循环,但似乎不起作用。

sql sql-server loops stored-procedures foreach
1个回答
0
投票

使用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
© www.soinside.com 2019 - 2024. All rights reserved.