2016-05-12 13 views
0

ich ein SQLQuery.sql in SQL Server mit diesem Inhalt erstellt:Wie Sicherungspunkte SQL Server Management Studio verwenden

declare @sql int; 

select @sql = count(1) from sys.tables 

save tran one 
print @sql 

select @sql = 0 
save tran two 

print @sql 
rollback tran one 

print @sql 

Ich würde erwarten, das Ergebnis als:

n 
0 
n 

Was mit meiner Anfrage falsch ist?

Antwort

3

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.

+0

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) –

Verwandte Themen