Zwiększanie licznika podczas polecenia OUTPUT w UPDATE

0

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

0

@Mandriospo Galaxy:

Sądzę że wielu będzie przeciwnych kodowi biznesowemu w SQL

Co jest NAD tym SQLem, w jakim języku aplikacja ?

0

Nie ważne. Już ogarnięte

DECLARE @tr__Transaction TABLE (tr_Id int, tr_ShippingMethodId int)
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))

DECLARE @TrIdsToUpdate TABLE (trIdToUpdate int)
INSERT INTO @TrIdsToUpdate (trIdToUpdate) values (1), (3), (5)

declare @last_th_Id INT = 10

UPDATE t
SET tr_ShippingMethodId = 99
	OUTPUT 
		deleted.rn+@last_th_Id, 
		inserted.tr_Id, 
		GETDATE(), 
		CONCAT( 'Record ', inserted.tr_Id, ' changed shipping method from ', deleted.tr_ShippingMethodId, ' to ', inserted.tr_ShippingMethodId )
FROM ( 
	SELECT *, 
	rn = ROW_NUMBER() OVER (ORDER BY tr_Id) 
	FROM @tr__Transaction 
	) t
WHERE tr_Id IN (SELECT u.trIdToUpdate FROM @TrIdsToUpdate u)

1 użytkowników online, w tym zalogowanych: 0, gości: 1