我使用SQLServer 2017,我有一个表,我想为每个id自动递增。 示例表A包含列
PolicyID,ClaimID,TranId
具有以下值
ABC123,111,1
当插入/添加另一行时TranId将显示2,依此类推但如果PolicyID不同,请说ABC456,那么预期的TranId应为1,但我的表只是递增而不是每个PolicyID。
答案 0 :(得分:1)
您正在尝试创建序列,但不应将其存储在表格中。
尝试创建视图:
create vw_xxx as
(
select PolicyID, ClaimID
, TranId = row_number() over (partition by PolicyID order by ClaimID)
from tableXXX
)
这是如何执行此操作的示例。您需要正确分区和排序才能获得正确的序列。
如果此表很大,那么您希望在分区上有一个索引,按列排序。
答案 1 :(得分:0)
每当您在MyTable
中输入新行时,您必须运行以下UPDATE
:
UPDATE Table_A
SET Table_A.TranId = Table_B.[TranId]
FROM MyTable AS Table_A
INNER JOIN (
SELECT PolicyID, ClaimID, ROW_NUMBER() OVER (PARTITION BY PolicyID, ClaimID ORDER BY ClaimID) AS [TranId]
FROM MyTable )表_B ON Table_A.PolicyID = Table_B.PolicyID AND Table_A.ClaimID = Table_B.ClaimID