sql 根据ID自动递增
sql auto increment based on ID
我使用的是 SQLServer 2017,我有一个 table 我想为每个 ID 自动递增。
示例 Table A 有列
PolicyID, ClaimID, TranId
具有以下值
ABC123, 111, 1
当另一行获得 inserted/added TranId 将显示 2 等等,但如果 PolicyID 不同,假设 ABC456 那么预期的 TranId 应该是 1 但我的 table 只是保持递增而不是每个策略 ID.
您正在尝试创建一个序列,这不应存储在 table 中。
尝试创建视图:
create vw_xxx as
(
select PolicyID, ClaimID
, TranId = row_number() over (partition by PolicyID order by ClaimID)
from tableXXX
)
这是如何执行此操作的示例。您需要正确地分区和排序以获得正确的顺序。
如果这个 table 很大,那么您希望在分区上有一个按列排序的索引。
每次在 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]
来自 MyTable
) Table_B
在 Table_A.PolicyID = Table_B.PolicyID 和 Table_A.ClaimID = Table_B.ClaimID
我使用的是 SQLServer 2017,我有一个 table 我想为每个 ID 自动递增。 示例 Table A 有列
PolicyID, ClaimID, TranId
具有以下值
ABC123, 111, 1
当另一行获得 inserted/added TranId 将显示 2 等等,但如果 PolicyID 不同,假设 ABC456 那么预期的 TranId 应该是 1 但我的 table 只是保持递增而不是每个策略 ID.
您正在尝试创建一个序列,这不应存储在 table 中。
尝试创建视图:
create vw_xxx as
(
select PolicyID, ClaimID
, TranId = row_number() over (partition by PolicyID order by ClaimID)
from tableXXX
)
这是如何执行此操作的示例。您需要正确地分区和排序以获得正确的顺序。
如果这个 table 很大,那么您希望在分区上有一个按列排序的索引。
每次在 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]
来自 MyTable ) Table_B 在 Table_A.PolicyID = Table_B.PolicyID 和 Table_A.ClaimID = Table_B.ClaimID