2010-09-20 16 views
5

मुझे आश्चर्य है कि तालिका चर के अंदर क्यों चर है जबकि लूप अन्य चरों की तरह व्यवहार नहीं करता है। तालिका चर केवल एक बार बनाया गया है और पूरे लूपिंग के माध्यम से उपयोग किया जाएगा। लेकिन लूप बढ़ने पर हर बार प्रारंभ होने वाले अन्य चर।लूप प्रत्येक बार प्रारंभ नहीं होने पर तालिका चर के अंदर: SQL सर्वर

अधिक जानकारी

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 

यह एक बग है के लिए नीचे दिए गए कोड की जाँच करें बाहर ??

उत्तर

5

आपका आधार गलत है। घोषित कथन का सामना करने के हर बार अन्य चर पुन: प्रारंभ नहीं होते हैं।

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 

प्रिंटों

1 
2 
... 
9 
10 
+1

अद्यतन के लिए धन्यवाद .. परिवर्तनीय के साथ परीक्षण करते समय मैं शून्य से चूक गया .. जिससे मेरा cofusion .. ..( – RameshVel

4

उम्मीद

एसक्यूएल सर्वर चर गुंजाइश, बैच या पूरे समारोह/प्रक्रिया/ट्रिगर प्रति है काला/नेस्ट निर्माण

http://msdn.microsoft.com/en-us/library/ms187953.aspx प्रति नहीं के रूप में:

एक चर का दायरा ट्रांजैक्ट-एसक्यूएल कथन के की सीमा है जो चर का संदर्भ दे सकता है। वैरिएबल का दायरा बिंदु से रहता है बैच के अंत तक घोषित किया गया है या संग्रहीत प्रक्रिया जिसमें यह घोषित किया गया है।

0

हालांकि यह पुराने पोस्ट है केवल आपके तालिका चर हर बार पाश कार्यान्वित लोड करने के लिए चाहते हैं, तो मेरी टिप्पणी

 
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

जोड़ने Wann। एक बार लूप के भीतर काम करने के बाद @Tablevariable से ड्रॉ करें।

+0

आप मैन्युअल रूप से तालिका चर नहीं छोड़ सकते हैं। –