2010-09-20 30 views
5

Tôi tự hỏi tại sao các biến bảng bên trong trong khi vòng lặp không hoạt động như các biến khác. Các biến bảng được tạo chỉ một lần và sẽ được sử dụng xuyên suốt toàn bộ vòng lặp. nhưng các biến khác được khởi tạo mỗi khi vòng lặp tăng lên.Biến bảng bên trong khi vòng lặp không khởi tạo mọi lúc: SQL Server

Kiểm tra mã dưới đây để biết thêm

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 

đây là lỗi ??

Trả lời

5

Tiền đề của bạn sai. Các biến khác không được reinitialised mỗi khi tuyên bố khai báo được gặp phải.

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 

Prints

1 
2 
... 
9 
10 
+1

cảm ơn cho bản cập nhật .. tôi bị mất khi kiểm tra với biến .. dẫn đến kết hợp của tôi .. :( – RameshVel

4

Đúng như dự đoán

SQL Server phạm vi biến là mỗi mẻ hoặc chức năng toàn bộ/thủ tục/kích hoạt, không tính theo đầu đen/lồng nhau xây dựng

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

Phạm vi của một biến là phạm vi của câu lệnh Transact-SQL có thể tham chiếu biến. Phạm vi của biến số kéo dài từ điểm nó là được khai báo cho đến khi kết thúc lô hoặc quy trình được lưu trữ trong đó nó được khai báo là .

0

Mặc dù nó là bài cũ chỉ Wann thêm ý kiến ​​của tôi

 
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

Nếu bạn muốn tải biến bảng mỗi lần vòng lặp thực thi. DROP FROM @Tablevariable sau khi hoàn thành công việc trong vòng lặp.

+0

Bạn không thể thả biến bảng theo cách thủ công. –

Các vấn đề liên quan