sql автоинкремент на основе идентификатора

Я использую SQLServer 2017, у меня есть таблица, которую я хочу автоматически увеличивать для каждого идентификатора. Пример таблицы А имеет столбцы

PolicyID, ClaimID, TranId

со следующими значениями

ABC123, 111, 1

когда вставляется / добавляется другая строка, TranId будет показывать 2 и т. д., но если PolicyID отличается, скажем, ABC456, то ожидаемый TranId должен быть 1, но моя таблица продолжает увеличиваться, а не для каждого PolicyID.

2 ответа

Решение

Вы пытаетесь создать последовательность, и она не должна храниться в таблице.

Попробуйте создать вид:

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

Это пример того, как это сделать. Вам нужно правильно разделить и упорядочить, чтобы получить правильную последовательность.

Если эта таблица большая, то вы хотите иметь индекс для раздела, упорядоченный по столбцам.

Каждый раз, когда вы вводите новую строку в вашем 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) Table_B ON Table_A.PolicyID = Table_B.PolicyID AND Table_A.ClaimID = Table_B.ClaimID

Другие вопросы по тегам