Nếu tôi chạy dưới đây trong MS SQL 2008 R2 tôi nhận được một kết quả không mong muốn.Phạm vi biến bảng trong con trỏ SQL
create table #DataTable (someID varchar(5))
insert into #DataTable
values ('ID1'),('ID2'),('ID3'),('ID4'),('ID5')
declare @data varchar(8);
declare myCursor cursor for
select someID from #DataTable
open myCursor
FETCH NEXT FROM myCursor INTO
@data
WHILE(@@Fetch_Status >=0)
BEGIN
declare @tempTable table (someValue varchar(10))
insert into @tempTable select @data + '_ASDF'
select * from @tempTable
FETCH NEXT FROM myCursor INTO
@data
END
close myCursor
deallocate myCursor
drop table #DataTable
Kết quả của phiên cuối cùng:
someValue
ID1_ASDF
ID2_ASDF
ID3_ASDF
ID4_ASDF
ID5_ASDF
tôi haved mong đợi chỉ để xem
someValue
ID5_ASDF
Dường như biến bảng @tempTable được giữ trong phạm vi giữa lặp con trỏ - nhưng làm thế nào là nó sau đó có thể tái tuyên bố biến trong mỗi lần lặp? Không có ý nghĩa với tôi.
tôi giải quyết nó bằng
delete @tempTable
trong mỗi lần lặp - mà cũng sao lưu các giả định của tôi về nó vẫn đang trong phạm vi.
Có ai có thể giải thích hành vi này không?
cảm ơn - nhưng làm cách nào để có thể khai báo biến một lần nữa trong mỗi lần lặp? – zmaster