Transaktionen wirken sich nicht auf lokale Variablen aus. Sie ermöglichen es Ihnen, Gruppen von Anweisungen zu verarbeiten, die den Inhalt der Datenbank ändern. Ich habe Ihr Beispiel gezwickt zu zeigen, dass:
BEGIN TRANSACTION
declare @sql int;
select @sql = count(1) from sys.tables
print @sql
save transaction one
CREATE TABLE TEMP (a varchar(1))
select @sql = count(1) from sys.tables
print @sql
select @sql = count(1) from sys.tables
save tran two
CREATE TABLE TEMP2 (a varchar(1))
select @sql = count(1) from sys.tables
print @sql
rollback tran one
select @sql = count(1) from sys.tables
print @sql
Jetzt können Sie sehen, dass die Anzahl der Tabellen während der Schritte der Transaktion baut aber die neuen verschwinden nach dem ROLLBACK:
6
7
8
6
Ich hoffe das hilft.
Vielen Dank, ich habe #tableTemp erstellt und dort die '@sql' eingefügt und dann die tran zurückgerollt und das Ergebnis war wie erwartet (zuerst bekam ich die '@sql' Variable zurück, dann bekam ich null oder leere Zeichenfolge zurückgegeben) –