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