Предполагая, что вы просто хотите обновить все, кроме одного для каждого набора соответствия TranID, затем попробуйте это решение.
-- Setup your data
IF OBJECT_ID('Test', 'U') IS NOT NULL DROP TABLE Test;
CREATE TABLE Test (TranID int)
INSERT Test (TranID) VALUES (1),(2),(2),(3),(3),(3),(6),(6)
GO
DECLARE @MaxTranID int = (SELECT MAX(TranID) FROM Test)
;WITH test_temp (idx, TranID)
AS
(
-- Get a unique identifier for each record
SELECT ROW_NUMBER() OVER (ORDER BY TranID) as idx
,TranID
FROM Test
)
,test_temp_dupes (TranID, MinIdx)
AS
(
-- Get the first record in each TranID group
SELECT TranID
,MIN(idx) as MinIdx
FROM test_temp
GROUP BY TranID
HAVING COUNT(*) > 1
)
-- Assign new values to each TranID in the dupe groups except the first record
UPDATE A
SET A.TranID = A.idx + @MaxTranID
FROM test_temp A
JOIN test_temp_dupes B
ON A.TranID = B.TranID
AND A.idx <> B.MinIdx
-- See your results
SELECT * FROM Test
В таблице больше столбцов? Я предполагаю, что вы хотите избежать дублирования 'TranID', вызванного обновлением также? Пожалуйста, покажите образец дары и желаемый результат. –
Пожалуйста, напишите инструкцию 'CREATE TABLE' для вашей таблицы – peterm