Возможно, вы также пытаетесь индексировать неверно:
a = 'apple'
a(3) ===> 'str' object is not callable
a[3] = l
использовать row_number()
select *, row_number() over(partition by InventoryId order by id) as newRevisionId
from tablename
создать таблицу # temp1 (A int, B int)
вставить в # temp1 (a, b) значения (1001,1234), (1002,2235), (1003,2235), (1004 , 2235), (1005,2235), (1006,2235), (1007,3234), (1008,3234), (1009,3234), (1010,3234), (1011,3234), (1012,3234) ), (1013,3234), (1014,3234)
выберите *, row_number () over (разделите на порядок b на b asc) из # temp1
Попробуйте это:
DECLARE @Table TABLE(Id INT,InventoryId INT,RevisionId INT)
INSERT INTO @Table
SELECT 1001,1234,1 UNION ALL
SELECT 1002,2235,1 UNION ALL
SELECT 1003,2235,2 UNION ALL
SELECT 1004,2235,2 UNION ALL
SELECT 1005,2235,3 UNION ALL
SELECT 1006,2235,4 UNION ALL
SELECT 1007,3234,1 UNION ALL
SELECT 1008,3234,2 UNION ALL
SELECT 1009,3234,3 UNION ALL
SELECT 1010,3234,3 UNION ALL
SELECT 1011,3234,4 UNION ALL
SELECT 1012,3234,5 UNION ALL
SELECT 1013,3234,5 UNION ALL
SELECT 1014,3234,6
;WITH cte
AS(
SELECT Id,InventoryId,RevisionId, ROW_NUMBER() OVER(PARTITION BY InventoryId ORDER BY id) AS NewRevision FROM @Table
)
UPDATE cte SET RevisionId=newRevision
SELECT * FROM @Table
Если вы хотите обновить значения обратно в таблицу с новым RevisionId, вы можете использовать CTE
, как показано ниже.
;with cte as
(
select *, row_number() over(partition by InventoryId order by id) as rn
from @table
)
update cte set RevisionId = rn