Mam kod, który aktualizuje pole tr_ShippinMethodId
we wpisach z tabeli tr__Transaction
i podczas aktualizacji dodaje wpis do tabeli tr_History
(taki log z informacjami co się stało z daną transakcją).
To jest o tyle fajne zapytanie, że te dwie czynności (aktualizacja jednej tabeli i dodawanie wpisu do drugiej) robią się jednocześnie.
Mam już prawie wszystko rozpracowane oprócz jednej kwestii.
Podczas tworzenia nowego wpisu w tabeli tr_History
muszę zwiększać numer identyfikatora rekordu (@th_Id
) i nie wiem jak to zrobić. Poniżej przykładowy kod, który normalnie można wywołać na każdym komputerze bo jest przygotowany w formie zmiennych.
DECLARE @tr__Transaction TABLE (tr_Id int, tr_ShippingMethodId int) -- główna tabela z transakcjami
INSERT INTO @tr__Transaction (tr_Id, tr_ShippingMethodId) values (1, 2),(2, 2),(3, 9),(4, 8),(5, 0)
DECLARE @tr_History TABLE (th_Id INT, th_TransId INT, th_Time DATETIME, th_Entry NVARCHAR(255)) -- tabela z historią zmian transakcji
DECLARE @TrIdsToUpdate TABLE (trIdToUpdate int) -- identyfikatory wpisów z tabeli transakcji, które chcę zaktualizować
INSERT INTO @TrIdsToUpdate (trIdToUpdate) values (1), (3), (5)
declare @th_Id INT = 10 -- identyfikator wpisów z tabeli tr_History, który należy w kodzie poniżej zwiększać o +1
UPDATE @tr__Transaction
SET tr_ShippingMethodId = 99
OUTPUT @th_Id, inserted.tr_Id, GETDATE(), CONCAT( 'Record ', inserted.tr_Id, ' changed shipping method from ', deleted.tr_ShippingMethodId, ' to ', inserted.tr_ShippingMethodId )
INTO @tr_History (th_Id, th_TransId, th_Time, th_Entry)
WHERE tr_Id IN (SELECT trIdToUpdate FROM @TrIdsToUpdate)
select * from @tr__Transaction
select * from @tr_History
Zaraz obok komendy OUTPUT
jest @th_Id
, które chciałbym za każdym razem zwiększać o 1.
Próbowałem zmienić kod w sposób opisany poniżej ale to tak nie działa (dalej @th_id
zwraca 10)
SET tr_ShippingMethodId = 99, @th_Id += 1
Proszę o pomoc