【问题标题】:sql auto increment based on IDsql根据ID自动递增
【发布时间】:2018-08-06 00:56:28
【问题描述】:

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

PolicyID、ClaimID、TranId

具有以下值

ABC123、111、1

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

【问题讨论】:

  • 嗨,你能展示一下你尝试过的东西吗?你看过像row_number() over(partition by column1, ..., column_n, order by column 1)这样的排名函数吗
  • 我认为您所说的您想要做的是将这个值存储在表中;这是一个坏主意。为什么?好吧,问题在于,如果添加/删除/更新另一行,则可能意味着其他行也需要修改,因此这不是一个好主意。因此,相反,您最好创建一个具有此值的VIEW。正如@MCP_infiltrator 所建议的那样,ROW_NUMBER() 就是一个很好的例子。

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


【解决方案1】:

每次您在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]

来自我的表 ) 表_B ON Table_A.PolicyID = Table_B.PolicyID AND Table_A.ClaimID = Table_B.ClaimID

【讨论】:

    【解决方案2】:

    您正在尝试创建一个序列,这不应该存储在表中。

    尝试创建一个视图:

    create vw_xxx as
    (
    select PolicyID, ClaimID
          , TranId = row_number() over (partition by PolicyID order by ClaimID)
    from tableXXX
    )
    

    这是如何执行此操作的示例。您需要正确分区和排序以获得正确的顺序。

    如果这个表很大,那么你想在分区上有一个索引,按列排序。

    【讨论】:

    • 感谢 Keith,我见过一些这样的陈述,但我很难理解 row_number() 和分区函数。
    • 分区是你分割数据的依据,顺序是顺序。
    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2021-03-29
    • 2021-04-25
    • 2016-04-11
    • 2011-01-31
    • 2010-10-04
    相关资源
    最近更新 更多