Du bruger ikke en temp tabel, bruger du en variable bord. Der er en forskel.
Temp-tabeller fungerer med transaktioner, variable tabeller gør det ikke. Se https://blog.sqlauthority.com/2009/12/28/sql-server-difference-temp-table-and-table-variable-effect-of-transaction/
Hvis du skulle ændre din variabeltabel @tab til en midlertidig tabel med #tab , ville du få din ønskede adfærd.
Forskelle mellem temp og variable tabeller:https://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in- sql-server/16386#16386
De links, jeg postede ovenfor, gennemgår det med flere detaljer, end jeg kunne.