Это не позволяет компилятору автоматически изменять значения переменных. переменная переменная предназначена для динамического использования.
Используйте табличную переменную (@temp) для хранения информации журнала. Табличные переменные переживают откат транзакции.
См. эту статью .
Если вы хотите эмулировать поведение вложенных транзакций, вы можете использовать именованные транзакции:
begin transaction a
create table #a (i int)
select * from #a
save transaction b
create table #b (i int)
select * from #a
select * from #b
rollback transaction b
select * from #a
rollback transaction a
В SQL Server, если вы хотите «суб-транзакцию», вы должны использовать save transaction xxxx
, которая работает как контрольная точка оракула. .