2010-09-20 1 views
5

Ich frage mich, warum die Tabellenvariablen innerhalb der while-Schleife sich nicht wie andere Variablen verhalten. Tabellenvariablen werden nur einmal erstellt und werden während der gesamten Schleifenverarbeitung verwendet. aber andere Variablen werden jedes Mal initialisiert, wenn die Schleife zunimmt.Tabellenvariablen innerhalb der While-Schleife, die nicht immer initialisiert wird: SQL Server

Überprüfen Sie den Code unten für weitere Informationen aus

declare @tt int 
set @tt =10 
while @tt>0 
begin 

     declare @temptable table(id int identity(1,1),sid bigint) 
     insert into @temptable 
       select @tt union all 
       select @tt + 1 

       select * from @temptable 
       --delete from @temptable 
       set @[email protected] 
end 

ist dies ein Fehler ??

Antwort

5

Ihre Prämisse ist falsch. Andere Variablen werden nicht jedes Mal erneut initialisiert, wenn die declare-Anweisung auftritt.

set nocount on 

declare @tt int 
set @tt =10 
while @tt>0 
begin 

     declare @i int 

     set @i = isnull(@i,0) + 1 
     print @i 
     set @[email protected] 

end 

Drucke

1 
2 
... 
9 
10 
+1

danke für das update .. ich verpasste isnull beim testen mit variabler .. das führte zu meinem cofusion .. :( – RameshVel

4

Wie erwartet

SQL Server Variable Umfang pro Charge ist oder die gesamte Funktion/Prozedur/Trigger, nicht pro schwarz/verschachteltes Konstrukt

http://msdn.microsoft.com/en-us/library/ms187953.aspx:

Der Gültigkeitsbereich einer Variablen ist der Bereich von Transact-SQL-Anweisungen, die die Variable referenzieren können. Der Gültigkeitsbereich einer Variable reicht von dem Punkt , der bis zum Ende der Charge deklariert ist oder gespeicherte Prozedur, in der deklariert ist.

0

Obwohl es alte Post ist WANN nur meine Kommentare hinzufügen

 
set nocount on 
declare @tt int 
set @tt =10 
while @tt>0 
begin 
     declare @i int=0 
     set @i = @i + 1 
     print @i 
     set @[email protected] 
end 

Results: 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
-1

Wenn Sie die Tabelle Variable jedes Mal, wenn die Schleife ausgeführt laden möchten. DROP FROM @Tablevariable, sobald die Arbeit in der Schleife abgeschlossen ist.

+0

Sie können eine Tabelle Variable nicht manuell löschen. –

Verwandte Themen