基于ID的sql自动增量

时间:2018-02-26 14:25:14

标签: sql-server auto-increment sql-server-2017

我使用SQLServer 2017,我有一个表,我想为每个id自动递增。 示例表A包含列

  

PolicyID,ClaimID,TranId

具有以下值

  

ABC123,111,1

当插入/添加另一行时TranId将显示2,依此类推但如果PolicyID不同,请说ABC456,那么预期的TranId应为1,但我的表只是递增而不是每个PolicyID。

2 个答案:

答案 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